gpt4 book ai didi

wpf - 如何绑定(bind)到 TreeView 的子分支或叶子(MVVM 样式)?

转载 作者:行者123 更新时间:2023-12-03 10:36:16 25 4
gpt4 key购买 nike

我是 TreeViews 的新手。在 WPF 样式中,我将 TreeView 分为三个级别:

ReportName1
NetworkName1
PrinterName1
PrinterName2
NetworkName2
PrinterName3
PrinterName4
ReportName2
....

在 XAML 中,我使用交互行为将 TreeView SelectedItem 绑定(bind)到 ViewModel:
  <TreeView ItemsSource="{Binding ReportTree}"  >
<i:Interaction.Behaviors>
<tvb:TreeViewBehavior SelectedItem="{Binding SelectedTreeItem, Mode=TwoWay}" />
</i:Interaction.Behaviors>

此时,当我在主报告名称下选择 ANY 项目时,从 ReportTree 发送项目一切正常。也就是说,如果我选择 PrinterName2,那么 SelectedTreeItem 将是 ReportName1 的主要 View 模型。

我需要知道的是,我怎样才能知道选择的是 PrinterName2 而不是 PrinterName1?

我的最终目标是允许选择树中的任何叶子或分支,并仅删除选定的叶子或分支。

有没有办法做到这一点?

感谢您对此的任何帮助。

最佳答案

这是使用简单 DataTemplate 解决此问题的一种方法对于包含 MouseBinding 的 TreeView在父 ViewModel 上调用选择命令并将单击的项目作为 CommandParameter 传递.

如果您的 ViewModel 看起来像这样:

public class MainViewModel
{
public ObservableCollection<ItemViewModel> Items { get; private set; }

public ItemViewModel SelectedItem { get; set; }

public ICommand SelectItem { get; private set; }

public MainViewModel()
{
SelectItem = new LazyCommand<ItemViewModel>(ExecuteSelect);
Items = new ObservableCollection<ItemViewModel>();
}

private void ExecuteSelect(ItemViewModel item)
{
SelectedItem = item;
}
}

为项目提供一个简单的 ViewModel:
public class ItemViewModel
{
public ObservableCollection<ItemViewModel> Items { get; private set; }

public string Name { get; set; }

public ItemViewModel()
{
Items = new ObservableCollection<ItemViewModel>();
}
}

然后你可以用 HierarchicalDataTemplate 定义一个 TreeView如 ItemTemplate :
<TreeView ItemsSource="{Binding Items}">
<TreeView.ItemTemplate>

<HierarchicalDataTemplate ItemsSource="{Binding Items}" >
<TextBlock Text="{Binding Name}">
<TextBlock.InputBindings>
<MouseBinding MouseAction="LeftClick"
Command="{Binding DataContext.SelectItem, RelativeSource={RelativeSource FindAncestor, AncestorType=TreeView}}"
CommandParameter="{Binding}" />
</TextBlock.InputBindings>
</TextBlock>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>

关键部分是从每个项目的 MouseBinding 绑定(bind)到 TreeViews DataContext.SelectItemCommand 并将项目作为参数传入。然后,您可以在 ViewModel 中处理选择本身(设置 SelectedItem 等)。

关于wpf - 如何绑定(bind)到 TreeView 的子分支或叶子(MVVM 样式)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26858417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com