如何在选择模式为“多个”时绑定Windows.UI.Xaml.Controls.TreeView的selecteditem属性

aemubtdh  于 2022-12-07  发布在  Windows
关注(0)|答案(1)|浏览(100)

我正在使用具有“多”选择模式的Windows.UI.Xaml.Controls的Treeview控件。此处我需要在双向绑定中将某些属性绑定为 SelectedItem,以便将选定的节点提取到可枚举集合中。但Windows.UI.Xaml.Controls.TreeView没有 *SelectedItem属性 * 或任何 *selectionChanged事件 *。如何提取选定的节点?

<muxc:TreeView SelectionMode="Multiple" Width="300" x:Name="CategoriesTree" 
              ItemsSource="{x:Bind _vm.Categories, Mode=OneWay}">
      <muxc:TreeView.ItemTemplate>
            <DataTemplate x:DataType="local1:CategoriesInfo">
                      <TreeViewItem ItemsSource="{x:Bind SubCategories}" Content="{x:Bind Name}" />
            </DataTemplate>
      </muxc:TreeView.ItemTemplate>
</muxc:TreeView>

我尝试在WinUi2中使用Microsoft.UI.Xaml.Controls的TreeView,但它抛出了一个运行时错误
不支持此类接口
Windows. Ui.Xaml创建的。如何执行此操作?

5kgi1eie

5kgi1eie1#

正如您在文档中所看到的,目前没有节点selectionChanged事件。
即使有TreeView.ItemInvokedEvent
当项目的多重选择核取方块被核取或取消核取时,不会引发这个事件。
这里有一个变通办法,你可以处理TreeView中的mouse click event,检测TreeView中SelectedNodes的变化。

int oldCount = 0;

public MainPage()
{
    this.InitializeComponent();
    DessertTree.AddHandler(PointerReleasedEvent, new PointerEventHandler(TreeView_OnPointerReleased), true);       
}

private void TreeView_OnPointerReleased(object sender, PointerRoutedEventArgs e)
{

    if (oldCount != DessertTree.SelectedNodes.Count)
    {
        foreach (TreeViewNode node in DessertTree.SelectedNodes)
        {
           do somthing...

        }
        oldCount = DessertTree.SelectedNodes.Count;
    }

}

相关问题