Обработка исключительных или условий при привязке к двум логическим свойствам в XAML - PullRequest
2 голосов
/ 24 мая 2011

Итак, у меня есть класс, к которому я хочу привязаться:

public class Awesome {
    public bool OptionA1 { get; set; }
    public bool OptionA2 { get; set; }

    public bool OptionB1 { get; set; }
    public bool OptionB2 { get; set; }
}

Когда я открываю этот класс в своем графическом интерфейсе, у меня есть две переключатели (называемые radioButtonA и radioButtonB), которые позволяют пользователю выбирать между группамиА и В, и у меня есть два флажка, чтобы позволить пользователю изменять А1 / А2 и В1 / В2 соответственно в зависимости от того, какая радиокнопка проверена.

Логика в классе технически не различает А и В, как ясделать на моем графическом интерфейсе.Поэтому, если OptionA1 == True и OptionB1 == True, класс будет выполнять поведение для OptionA1 и B1, как и ожидалось.

Тем не менее, Я хочу представить группы A и B как исключительные или: это означает, что если для OptionA1 или OptionA2 задано значение true, OptionB1 и OptionB2 оба должны быть ложными.И наоборот.

Следующая привязка автоматически переназначает / перепривязывает флажок в зависимости от того, какая радиопереключатель / группа отмечена, но она не обеспечивает исключительную или взаимосвязь между группами.Таким образом, пользователь может нажать RadioButtonA и установить оба флажка.Если пользователь затем нажимает RadioButtonB, OptionA1 и OptionA2 по-прежнему имеют значение true (как и ожидалось).Как автоматически установить для них значение false при проверке RadioButtonB?

<CheckBox Content="Do Option 1">
    <CheckBox.Style>
        <Style TargetType="CheckBox">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=radioButtonA, Path=IsChecked}" Value="True">
                    <Setter Property="IsChecked">
                        <Setter.Value>
                            <Binding Path="OptionA1" Mode="TwoWay"/>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
                <DataTrigger Binding="{Binding ElementName=radioButtonB, Path=IsChecked}" Value="True">
                    <Setter Property="IsChecked">
                        <Setter.Value>
                            <Binding Path="OptionB1" Mode="TwoWay"/>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </CheckBox.Style>
</CheckBox>

1 Ответ

2 голосов
/ 24 мая 2011

Я не думаю, что вы сможете сделать это в прямом XAML.Вам нужно будет либо написать код в вашем code-behind / viewmodel, либо написать собственный IValueConverter (возможно, MultiConverter?), Который его обрабатывает.В любом случае, это какой-то код.

...