尽管缺乏PropertyChanged攻击,数据绑定似乎仍然有效

时间:2011-10-24 12:16:17

标签: wpf xaml data-binding

我有一个窗口,其中有两个复选框绑定到类Options的属性:

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 个答案:

答案 0 :(得分:1)

如果您不需要视图来关心模型,那么使用INotify接口就没有意义了。但是,如果由于任何原因模型的属性发生更改,您需要在视图中了解它。

答案 1 :(得分:0)

使用GUI中的绑定更新模型时,绑定会重新加载模型以获取结果值。