为什么复选框会丢失';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>

谢谢。

为什么复选框会丢失';s用户与绑定交互后的IsChecked绑定

您的项目中还有其他事情要做。

我尝试了以下方法:

<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版本中修复的一个错误。