我尝试制作使用TreeView
的{{1}},并且还绑定到具有ItemTemplate
属性的视图模型。
我不确定为什么这不起作用,所以如果问题看起来含糊不清,我会道歉。
我还将代码缩减到我认为的问题,因为我的应用程序有更多IsSelected
,所以我希望我所包含的内容已足够。
以下是我定义DataTemplate的方法:
XAML
以下是我如何使用它:
<DataTemplate x:Key="ElementDataTemplate">
<Label Content="{Binding Path=DisplayText}"></Label>
</DataTemplate>
我的ViewModel具有DisplayText和IsSelected属性。
我知道我正确地绑定到ViewModel,因为我看到与我的数据上下文的Elements属性中相同数量的项目,并且我的Label的Coutent正确地设置为DisplayText-当我运行应用程序时,我已通过getter上的断点验证了这一点。
然而,ViewModel上的 <TreeView ItemsSource="{Binding Elements}"
ItemTemplate="{DynamicResource ElementDataTemplate}">
<TreeView.Resources>
<Style TargetType="ListBoxItem">
<Setter Property="IsSelected"
Value="{Binding Path=IsSelected, Mode=TwoWay}" />
</Style>
</TreeView.Resources>
</TreeView>
属性的getter永远不会被调用(永远不会遇到断点),所以很明显我搞砸了绑定的东西。被选中的财产。
我应该指出,当我运行应用程序时,我可以使用鼠标选择项目并且它们可视地反映选择,因此TreeView项目本身被选中,它只是不绑定到ViewModel&#39; s IsSelected属性。任何帮助将不胜感激!
答案 0 :(得分:0)
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/>
</Style>
</TreeView.ItemContainerStyle>
我使用“ListBoxItem”而不是“TreeViewItem”。复制/粘贴得到了我的好处。