【发布时间】:2015-04-13 23:42:58
【问题描述】:
我目前正在关注this 指南,以设置带有复选框的 TreeView。在我的代码中,树“FooViewModel”在我的 MainViewModel 中启动,并作为 ItemsSource 绑定到 TreeView。我希望能够订阅 MainViewModel 中的某些事件,该事件将在选中或取消选中某些内容时触发。这样我就可以遍历“FooViewModel”并检查哪些节点具有 IsChecked = True。如何创建此事件绑定?
这是我的代码:
<Style x:Key="TreeViewItemStyle" TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="False" />
<Setter Property="IsSelected" Value="{Binding IsInitiallySelected, Mode=OneTime}" />
<Setter Property="KeyboardNavigation.AcceptsReturn" Value="True" />
<Setter Property="xn:VirtualToggleButton.IsVirtualToggleButton" Value="True" />
<Setter Property="xn:VirtualToggleButton.IsChecked" Value="{Binding IsChecked}" />
<Setter Property="Focusable" Value="False" />
</Style>
<xn:TreeView ItemsSource="{Binding CollectionFooViewModel}" ItemContainerStyle="{StaticResource TreeViewItemStyle}">
<xn:TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children, Mode=OneTime}">
<StackPanel Orientation="Horizontal">
<CheckBox Focusable="False" IsChecked="{Binding IsChecked}" VerticalAlignment="Center"/>
<ContentPresenter Content="{Binding Name, Mode=OneTime}" Margin="2,0"/>
</StackPanel>
</HierarchicalDataTemplate>
</xn:TreeView.ItemTemplate>
</xn:TreeView>
我想如果有办法将“IsChecked”绑定到两个属性(一个在 FooViewModel 中,另一个在 MainViewModel 中)我会得到答案。
【问题讨论】:
-
如果你想为你使用的样式和模板添加你的代码,或者避免在你给出的代码中使用它们,通过在一个更简单的、更少“设计”的代码中创建这个场景,它可以帮助我们理解它是什么您是否正在尝试完成并提出解决方案