我正在使用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的新手。
谢谢!
答案 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>