以下TreeView设置有什么问题?设置父节点VM的selected
属性会切换子节点的selected
属性。
<TreeView ItemsSource="{Binding Documents}">
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="True" />
<Setter Property="IsSelected" Value="{Binding selected}" />
</Style>
</TreeView.ItemContainerStyle>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding descriptions}">
<HierarchicalDataTemplate.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="IsSelected" Value="{Binding selected}" />
</Style>
</HierarchicalDataTemplate.ItemContainerStyle>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding name}" />
</StackPanel>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
<TextBlock Text="{Binding name}" />
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
VM对象如下所示:
public class DocumentVM : ObservableObject
{
private string _name;
public string name
{
get { return _name; }
set { Set(ref _name, value); }
}
private bool _selected = false;
public bool selected
{
get { return _selected; }
set { Set(ref _selected, value); }
}
}
DescriptionVM
非常相似。
例如,如果我运行以下两行:
MyVM.Documents[1].descriptions[0].selected = true;
MyVM.Documents[1].selected = true;
第一行将第二个文档的第一个子节点设置为选中状态,而第二行将第二个文档的第一个子节点设置为选中状态,但将第二个文档的第一个子节点设置为未选中状态。我确定这是我在这里使用的DataTemplates的问题,但无法弄清楚那是什么。