在阅读有关TreeView和绑定到视图模型(http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx)的帖子时,似乎可以绑定TreeViewItem IsSelected属性。但是,我有以下代码,它们总是在Initialize()上失败,因为它试图设置一个只读属性?
<sdk:TreeView Grid.Column="0" Grid.Row="2" Style="{StaticResource TreeViewStyle}"
ItemsSource="{Binding tvData}" >
<sdk:TreeView.ItemContainerStyle>
<Style TargetType="sdk:TreeViewItem">
<Setter Property="IsEnabled" Value="True" />
<Setter Property="IsExpanded" Value="True" />
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
</Style>
</sdk:TreeView.ItemContainerStyle>
<sdk:TreeView.ItemTemplate>
<sdk:HierarchicalDataTemplate ItemsSource="{Binding Children}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding ItemName}" FontWeight="{Binding ItemFontWeight}"/>
</StackPanel>
</sdk:HierarchicalDataTemplate>
</sdk:TreeView.ItemTemplate>
答案 0 :(得分:2)
您无法通过Setter
中的Style
分配绑定。实际上,您正在尝试在Setter.Value
属性上设置绑定。 Xaml并未推断您是要在目标属性上设置绑定。反过来,Setter
只是假设您正在尝试将值直接设置为IsSelected
,它知道它只是读取错误。
答案 1 :(得分:1)
我可以推荐这种技术来解决问题:
编辑: 我应该提一下,我没有尝试过这个确切场景的技术(绑定TreeViewItem的IsSelected属性),但是我已经在很多其他场合使用过它,到目前为止它已经完美无缺。