Привязка данных, кажется, работает, несмотря на отсутствие срабатываний PropertyChanged - PullRequest
2 голосов
/ 24 октября 2011

У меня есть окно с двумя флажками, привязанными к свойствам класса Параметры:

public class Options
{
    public bool Option1 { get; set; }

    public bool Option2 { get; set; }

    public bool AnotherOption { get; set; }
}

xaml:

<CheckBox
    Content="Option #1"
    IsChecked="{Binding Path=Option1}"/>
<CheckBox
    Content="Option #2"
    IsChecked="{Binding Path=Option2}"/>

Также у меня есть третий флажок, который должен быть отключен, когда два другихне проверены.Для этого я использовал мультисвязывание:

<CheckBox
    IsChecked="{Binding Path=AnotherOption}"
    Content="Another option">
<CheckBox.IsEnabled>
    <MultiBinding Converter="{StaticResource MultiValueLogicalOrConverter}">
        <Binding Path="Option1"/>
        <Binding Path="Option2"/>
    </MultiBinding>
</CheckBox.IsEnabled>
</CheckBox>

конвертер:

public class MultiValueLogicalOrConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        return values.Cast<bool>().Any(value => value);
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}

Кажется, это работает нормально.Но иногда указывалось, что свойства Option не являются свойствами зависимостей и не запускают событие PropertyChanged, поэтому я не могу объяснить, почему это работает.Есть идеи?

Ответы [ 2 ]

1 голос
/ 24 октября 2011

Если вам не нужен вид для заботы о модели, то нет смысла использовать интерфейс INotify.Однако если по какой-либо причине свойство модели изменится, вам потребуется, если вы хотите, чтобы ваш взгляд знал об этом.

0 голосов
/ 24 октября 2011

Когда вы обновляете модель с привязкой из GUI, модель перезагружается привязками для получения значения результата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...