@dan1001

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

WPF C# からVBへ変換

Q&A

Closed

C#からVBへのコード変換

VB初心者です。
今現在、VBのツールの使い方をBindも含めて勉強中です。
WPFということもあり、ググりながら使い方を学んでいました。
目標となる動作コードがC#で掲載されていたので、
それをVBコードに変換して、使用したいと考えますが、コードの意味が分かりません。
どなたか力を貸していただけないでしょうか。

該当するソースコード

DataGridWithSelectAll.cs

using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Windows;
using System.Windows.Controls;

namespace DataTableSelectAll
{
class DataGridWithSelectAll : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;

    public DataTable Items { get; set; }


    protected virtual string selectedPropertyName => "IsSelected";
    protected virtual string cellTemplateKey => "IsSelected";
    protected virtual string headerTemplateKey => "SelectAll";


    protected void AddItemsCallback()
    {
        Items.ColumnChanged += (s, e) =>
        {
            if (e.Column.ColumnName == selectedPropertyName)
            {
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("SelectAll"));
            }
        };
    }

    public void Bind(DataGrid dataGrid)
    {
        dataGrid.AutoGeneratingColumn += (s, e) =>
        {
            if (e.PropertyName == selectedPropertyName)
            {
                var c = new DataGridTemplateColumn()
                {
                    CellTemplate = (DataTemplate)dataGrid.Resources[cellTemplateKey],
                    Header = e.Column.Header,
                    HeaderTemplate = (DataTemplate)dataGrid.Resources[headerTemplateKey],
                    HeaderStringFormat = e.Column.HeaderStringFormat,
                    SortMemberPath = e.PropertyName // this is used to index into the DataRowView so it MUST be the property's name (for this implementation anyways)
                };
                e.Column = c;
            }
        };

        dataGrid.DataContext = this;

    }


    public bool? SelectAll
    {
        get
        {
            var uniqueList = Items.AsEnumerable().Select(row => row[selectedPropertyName]).Distinct().ToList();
            return uniqueList.Count() == 1 ? (bool?)uniqueList.First() : null;
        }
        set
        {
            Items.AsEnumerable().ToList().ForEach(row => row[selectedPropertyName] = value);
        }
    }
}

}

このコードの += (s, e) => という箇所がどうしてもわかりません。
どのように変換したら良いでしょうか。。

0 likes

2Answer

ラムダ式とイベントハンドラ割り当ての複合体です。

公式ドキュメントは、

イベント (C# プログラミング ガイド)
ラムダ式 (C# リファレンス)

対応する、VB.NETのドキュメントは、

イベント (Visual Basic)
ラムダ式 (Visual Basic)

最初は、「イベント(Visual Basic)」のページに書かれている、Handlers句や、メソッドをAddHandlerする方法に置き換えてみると理解が進むかもしれません。

1Like

Your answer might help someone💌