如何检查带触发器的复选框?

时间:2011-09-03 09:45:35

标签: wpf mvvm triggers treeview

我的TreeView节点有一个复选框。如果用户选中一个复选框,则应自动禁用rootnode subnodecollection中的所有其他复选框。

这是我的树视图:

<TreeView ItemsSource="{Binding Items}">
    <TreeView.ItemContainerStyle>
        <Style TargetType="{x:Type TreeViewItem}" >
            <Style.Triggers>
                <Trigger Property="HasItems" Value="true">
                    <Setter Property="Focusable" Value="False"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </TreeView.ItemContainerStyle>
        <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding SubNodes}">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="20"/>
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>
                <CheckBox Grid.Column="0"/>
                <TextBlock Text="{Binding Text}" Grid.Column="1"/>
            </Grid>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

2 个答案:

答案 0 :(得分:0)

您可以从RadioBox派生并在您自己或您的视图模型寄存器上实现此功能,以更改已检查属性并重置所有其他列表项检查属性。

答案 1 :(得分:0)

修改ViewModel是可行的方法:

SubNodes集合中的每个项目都应该实现一个新的bool属性,例如'Enabled'和另一个bool'Checked'。 然后将'Checked'绑定到Checkbox的'IsChecked'属性并'Enabled'绑定到'IsEnabled'并在'Checked'的set accesor中构建必要的逻辑,将其设置为false,在其他每个项目中启用'Enabled'属性集合。