DataTrigger setter不会更新属性。为什么?

时间:2016-07-18 12:11:25

标签: c# wpf xaml

XAML:

<RadioButton x:Name="RadioButtonA">
        <RadioButton.Style>
            <Style TargetType="RadioButton">
                <Setter Property="IsChecked" Value="{Binding Path=RadioAValue}" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=CheckBoxA, Path=IsChecked}" Value="True">
                        <Setter Property="IsChecked" Value="True"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </RadioButton.Style>
    </RadioButton>

C#代码背后

public bool RadioAValue
{
    get
    {
    ...
    }
    set
    {
    ...
    }
}
选中RadioAvalue时,不会调用

CheckBoxA的设置部分。 有什么理由吗?

2 个答案:

答案 0 :(得分:1)

如果你想让条件设定器使用MultiBinding,那么你现在就用已设置的值

来阻止绑定
<Setter Property="IsChecked" Value="{Binding Path=RadioAValue}" />

必须是这样的(没有考虑过思考):

<RadioButton x:Name="YouRadioButton">
        <RadioButton.Style>
            <Style TargetType="RadioButton">
                <Style.Triggers>
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition Binding="{Binding ElementName=CheckBoxA, Path=IsChecked}" Value="True"/>
                            <Condition Binding="{Binding RadioAValue}" Value="True"/>
                        </MultiDataTrigger.Conditions>
                        <MultiDataTrigger.Setters>
                            <Setter Property="IsChecked" Value="True"/>
                        </MultiDataTrigger.Setters>
                    </MultiDataTrigger>
                    <DataTrigger Binding="{Binding ElementName=CheckBoxA, Path=IsChecked}" Value="False">
                        <Setter Property="IsChecked" Value="False"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </RadioButton.Style>
    </RadioButton>
    <CheckBox x:Name="CheckBoxA"/>

答案 1 :(得分:1)

代码中的问题

您正在Style Setter

中设置绑定
<Setter Property="IsChecked" Value="{Binding Path=RadioAValue}" />

点击checkbox后,您已使用值Binding覆盖False。现在 元素上没有更多的绑定 ,它就不再调用该集了。

此外,如果您尝试将其绑定在RadioButton本身而不是setters上,这将取得更多优先权,并且您的Triggers无法在那里工作。

<强>解决方案

我建议您对Command进行Checkbox绑定,并从ViewModel更新值RadioAValue