XamTreeGrid で行を選択した際のイベントで “選択した行のデータ” を取得する方法をご紹介します。

今回は PreviewMouseLeftButtonDown イベントを例に ActiveDataItem を取得してみます。結論を申し上げますと、非同期処理を使って UI スレッドの処理より後に取得する必要があります。

まずは以下のコードで試した場合、ActiveDataItem は null となってしまいます。

private void xamTreeGrid_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    var treeGrird = sender as XamTreeGrid;
    if (treeGrird != null)
    {
        var selectedItem = xamTreeGrid.ActiveDataItem;
        if (selectedItem != null)
        {
            MessageBox.Show($"選択されたデータ: {selectedItem}");
        }
    }
}

ですので、以下のように非同期処理を使って取得してください。

private void xamTreeGrid_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    var treeGrird = sender as XamTreeGrid;
    if (treeGrird != null)
    {
        Dispatcher.BeginInvoke(new Action(() => // 👈 
        {
            var selectedItem = xamTreeGrid.ActiveDataItem;
            if (selectedItem != null)
            {
                if (selectedItem is FileNode fileNode)
                { 
                    MessageBox.Show($"選択されたデータ: {fileNode.Name}");
                }
            }
        }), System.Windows.Threading.DispatcherPriority.Background);
    }
}

是非お試しください。

Tagged:

製品について

Ultimate UI for WPF