我有一个视图模型,其中包含具有
Checked
属性的项目列表。ListBox
,其项目的 DataTemplate
中每个项目都有一个复选框。
此外,视图模型还有一个属性
AllowMultiSelect
。如果为 true,则界面必须允许用户选中许多复选框。但如果为 false,则界面应显示 RadioButton
,并且用户应仅选择一个。
我尝试了一个奇特的 XAML,其中包含项目的
CheckBox
和 RadioButton
,并在一些派生属性的帮助下根据 Visibility
的值设置它们的 AllowMultiSelect
。
<ListBox.ItemTemplate>
<DataTemplate DataType="{x:Type local:VMType}">
<StackPanel Orientation="Horizontal" Margin="0 5 0 0">
<CheckBox IsChecked="{Binding IsChecked}"
Visibility="{Binding Path=DataContext.ShowCheck,
ElementName=MyList,
Converter={StaticResource BoolToVisible}}"/>
<RadioButton IsChecked="{Binding IsChecked}" GroupName="TableRadios"
Visibility="{Binding Path=DataContext.ShowRadio,
ElementName=MyList,
Converter={StaticResource BoolToVisible}}"/>
<TextBlock Text="{Binding Text}" Margin="5 0 0 0"/>
</StackPanel>
但是
RadioButton
(甚至隐藏)正在影响选择。当我单击复选框时,该项目的 Checked
属性会发生变化,此更改会反映在隐藏的 RadioButton
中,然后收音机会自动取消选择其他项目。
问题:有没有办法“仅当”属性为真时才进行绑定?如果
AllowMultiSelect
为 true,我不想绑定单选按钮。
这不是你问的,但我认为完全切换 CheckBox 和 RadioButton 会简单得多。
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="0 5 0 0">
<ContentControl>
<ContentControl.Style>
<Style TargetType="ContentControl">
<Setter Property="Content">
<Setter.Value>
<CheckBox IsChecked="{Binding IsChecked}"/>
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=DataContext.ShowRadio, ElementName=MyList}" Value="True">
<Setter Property="Content">
<Setter.Value>
<RadioButton IsChecked="{Binding IsChecked}" GroupName="TableRadios"/>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
<TextBlock Text="{Binding Text}" Margin="5 0 0 0"/>
</StackPanel>
</DataTemplate>