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); } }
是非お試しください。