Kishor
Kishor

Reputation: 4096

DataTrigger setter will not update property. Why?

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# Code behind

public bool RadioAValue
{
    get
    {
    ...
    }
    set
    {
    ...
    }
}

set section of RadioAvalue will not be called when CheckBoxA is checked. Any reason why?

Upvotes: 0

Views: 722

Answers (2)

Gopichandar
Gopichandar

Reputation: 2842

Problem in your code

You are setting the binding in Style Setter

<Setter Property="IsChecked" Value="{Binding Path=RadioAValue}" />

and on clicking the checkbox you have overwriting the Binding with the value False. Now there is no more Bindings over the element and it wont call the set anymore.

Also, if you try to bind it over the RadioButton itself instead of setters that will take more precedence and your Triggers won't work there.

Solution

I would recommend you to have Command binding over the Checkbox and update the value RadioAValue from your ViewModel

Upvotes: 1

Shakra
Shakra

Reputation: 501

If you want conditional setter use MultiBinding, right now you block binding with already setted value

<Setter Property="IsChecked" Value="{Binding Path=RadioAValue}" />

Must be something like this (didn't test thought):

<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"/>

Upvotes: 1

Related Questions