Silverlight TreeViewItem,绑定到IsSelected,如何?

时间:2010-11-05 14:12:39

标签: silverlight-4.0 treeview mvvm-light

在阅读有关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>

2 个答案:

答案 0 :(得分:2)

您无法通过Setter中的Style分配绑定。实际上,您正在尝试在Setter.Value属性上设置绑定。 Xaml并未推断您是要在目标属性上设置绑定。反过来,Setter只是假设您正在尝试将值直接设置为IsSelected,它知道它只是读取错误。

答案 1 :(得分:1)

我可以推荐这种技术来解决问题:

http://blogs.msdn.com/b/delay/archive/2009/05/07/one-more-platform-difference-more-or-less-tamed-settervaluebindinghelper-makes-silverlight-setters-better.aspx

编辑: 我应该提一下,我没有尝试过这个确切场景的技术(绑定TreeViewItem的IsSelected属性),但是我已经在很多其他场合使用过它,到目前为止它已经完美无缺。