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