在ItemTemplate中使用Listbox

时间:2008-11-19 10:20:01

标签: c# wpf

我有一个listbox控件。我为此ItemTemplate创建了listbox,其中包含两个控件。

  1. 切换按钮
  2. 列表框控件
  3. 结构

    <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>
    

    基本上Listbox2CheckedListbox。我的要求如下 1.将ToggleButton绑定到Listbox1 SelectedItem,即如果在Listbox1中选择了4项,则应自动检查第4项的togglebutton,并且应取消选中其他togglebutton。 2.如果选中ToggleButton,则应自动选中Listbox2中的所有复选框。此外,如果取消选中Listbox2中的其中一个复选框,则ToogleButton应自动取消选中。 (此功能类似于TreeNode和子节点功能。如果选中了parentnode,则所有子节点都被选中,如果未选择其中一个子节点,则取消选择parentnode)。

1 个答案:

答案 0 :(得分:1)

示例代码有助于我们更好地了解您的问题。

看起来您正在尝试向UI添加一些业务逻辑,尝试创建正确的ViewModel,然后将其绑定到控件,以便可以在ViewModel端完成计算,并根据您的逻辑更新UI - (INotifyPropertyChanged)

ViewModel将具有Bool属性(Bind to ToggleButton),该属性根据另外3个bool(绑定到4个Checkbox)而变化。在ViewModel内部的任何setter调用中,必须再次重新计算整个属性(它将是一个布尔AND操作)。由于CheckBox绑定模式默认为TwoWay,因此实现起来非常容易。