我有一个listbox
控件。我为此ItemTemplate
创建了listbox
,其中包含两个控件。
结构
<Listbox x:Key="Listbox1" ItemTemplate={StaticResource ListBox1ParentItemTemplate}>
</Listbox>
<Datatemplate x:Key="ListBox1ParentItemTemplate">
<ToggleButton></ToggleButton>
<Listbox x:Key="Listbox1" ItemTemplate={StaticResource ListBox2ParentItemTemplate}>
</Listbox>
</Datatemplate>
<Datatemplate x:Key="ListBox2ParentItemTemplate">
<TextBlock Text="{Binding Mode=Default, XPath=@Description}" TextWrapping="Wrap"/>
<CheckBox DockPanel.Dock="Right" />
</Datatemplate>
基本上Listbox2
是CheckedListbox
。我的要求如下
1.将ToggleButton
绑定到Listbox1 SelectedItem
,即如果在Listbox1
中选择了4项,则应自动检查第4项的togglebutton,并且应取消选中其他togglebutton。
2.如果选中ToggleButton
,则应自动选中Listbox2
中的所有复选框。此外,如果取消选中Listbox2
中的其中一个复选框,则ToogleButton
应自动取消选中。 (此功能类似于TreeNode
和子节点功能。如果选中了parentnode,则所有子节点都被选中,如果未选择其中一个子节点,则取消选择parentnode)。
答案 0 :(得分:1)
示例代码有助于我们更好地了解您的问题。
看起来您正在尝试向UI添加一些业务逻辑,尝试创建正确的ViewModel,然后将其绑定到控件,以便可以在ViewModel端完成计算,并根据您的逻辑更新UI - (INotifyPropertyChanged)
ViewModel将具有Bool属性(Bind to ToggleButton),该属性根据另外3个bool(绑定到4个Checkbox)而变化。在ViewModel内部的任何setter调用中,必须再次重新计算整个属性(它将是一个布尔AND操作)。由于CheckBox绑定模式默认为TwoWay,因此实现起来非常容易。