在WPF树视图中取消选择数据绑定对象

时间:2014-11-07 10:59:02

标签: c# wpf xaml mvvm treeview

我正在使用WPF应用程序,我有2个TreeViews。两者都有一组ViewModel对象作为其ItemsSource。我尝试这样做,以便当用户在一个TreeView中选择一个项目时,其他选项将更改为null。

但是,我注意到TreeView中的实际项目是SomethingViewModel而不是TreeViewItem。这意味着它们没有IsSelected属性。我已经尝试将IsSelected属性添加到ViewModel对象并将该属性绑定到我使用的TreeViewItem模板,但这似乎不起作用。

XAML:

<TreeView x:Name="trvMaterials" SelectedItemChanged="trvMaterials_SelectedItemChanged" ItemsSource="{Binding MaterialListViewModel.MaterialViewModels}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding MaterialVariants}">
            <TreeViewItem Header="{Binding InternalName, Mode=OneWay}" IsSelected="{Binding IsSelected}"></TreeViewItem>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

C#:

public bool IsSelected
{
    get { return isSelected; }
    set { isSelected = value; RaisePropertyChanged("IsSelected"); }
}

如何才能使此功能正常运行?请记住,我是WPF和MVVM的新手。

谢谢!

1 个答案:

答案 0 :(得分:1)

不要像你那样绑定IsSelected。像下面一样添加ItemContainerStyle

<TreeView x:Name="trvMaterials" SelectedItemChanged="trvMaterials_SelectedItemChanged" ItemsSource="{Binding MaterialListViewModel.MaterialViewModels}">
<TreeView.ItemContainerStyle>
    <Style TargetType="TreeViewItem">
      <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/>
    </Style>
  </TreeView.ItemContainerStyle>
 <TreeView.ItemTemplate>
  <HierarchicalDataTemplate ItemsSource="{Binding MaterialVariants}">
    <TextBlock Text="{Binding InternalName, Mode=OneWay}"></TextBlock >
  </HierarchicalDataTemplate>
 </TreeView.ItemTemplate>
</TreeView>