为什么复选框会丢失';s用户与绑定交互后的IsChecked绑定
本文关键字:绑定 用户 交互 IsChecked 复选框 为什么 | 更新日期: 2023-09-27 18:27:13
更新:此问题已在.NET 4.0上得到修复(我使用的是3.5)。
我正在尝试使用复选框,以便用户可以手动设置它,除非同一窗口中的组合框具有特定值(在这种情况下,复选框被禁用并选中)。
在用户手动选中/取消选中复选框之前,此操作非常有效。之后,当组合框中的值发生更改时,IsChecked=True设置器将停止工作。IsEnabled=False设置器继续按预期工作。
我最终不得不在后面的代码中使用一些逻辑,当时我希望使用纯Xaml是可能的。
有人知道这是一个错误还是故意的行为吗。如果是,为什么?
<CheckBox>
Some text here
<CheckBox.Style>
<Style TargetType="{x:Type CheckBox}">
<Setter Property="IsChecked" Value="False" />
<Setter Property="IsEnabled" Value="True" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=SelectedValue, ElementName=comboBox1, Mode=OneWay}" Value="Disable Checkbox">
<Setter Property="IsChecked" Value="True" />
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</CheckBox.Style>
</CheckBox>
谢谢。
您的项目中还有其他事情要做。
我尝试了以下方法:
<Window x:Class="Test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow"
Name="Window"
SizeToContent="WidthAndHeight">
<StackPanel>
<CheckBox>
some text here
<CheckBox.Style>
<Style TargetType="{x:Type CheckBox}">
<Setter Property="IsChecked" Value="False" />
<Setter Property="IsEnabled" Value="True" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=SelectedIndex, ElementName=combo, Mode=OneWay}" Value="2">
<Setter Property="IsChecked" Value="True" />
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</CheckBox.Style>
</CheckBox>
<ComboBox Name="combo">
<TextBlock>item 1</TextBlock>
<TextBlock>item 2</TextBlock>
<TextBlock>item 3</TextBlock>
<TextBlock>item 4</TextBlock>
<TextBlock>item 5</TextBlock>
</ComboBox>
</StackPanel>
</Window>
非常容易。这里的目标是,当在组合框中选择项目3时,为IsEnable和IsChecked设置与您完全相同的值
它就像一个符咒。也就是说:用户可以随意选中/取消选中复选框,然后当他在组合框中选择"项目3"时,复选框将被选中并禁用。如果他再次更改组合框中选定的项目,则复选框将被取消选中并重新启用,他可以一次又一次地选中/取消选中它。
所以你还有其他事情要做。你写的应该行得通。
编辑:关于您的评论,我用3.5版本而不是最初使用的4.0版本进行了测试,确实可以重现您的问题,因此这显然是.net框架4.0版本中修复的一个错误。