WPF复选框IsChecked属性不会根据绑定值更改

时间:2009-09-03 11:05:25

标签: wpf data-binding checkbox

这是我的代码:

xaml方: 我使用数据模板绑定项“dataType1”

<DataTemplate DataType="{x:Type dataType1}">
    <WrapPanel>
        <CheckBox IsChecked="{Binding Path=IsChecked, Mode=TwoWay}" Command="{Binding Path=CheckedCommand} />
        <TextBlock Text="{Binding Path=ItemName, Mode=OneWay}" />
    </WrapPanel>
</DataTemplate>

然后我用类型为“dataType1”的项目创建一个ComboBox

<ComboBox Name="comboBoxItems" ItemsSource="{Binding Path=DataItems, Mode=TwoWay}">

这里是dataType1 difinition:

class dataType1{public string ItemName{get; set;} public bool IsChecked {get; set;}}

方案是我准备一个dataType1列表并将其绑定到ComboBox,ItemName显示完美无缺,而CheckBox IsChecked值始终未经检查,无论dataType1中的“IsChecked”值是什么。

在wpf中的CheckBox中绑定IsChecked属性需要特殊处理吗?

Peter Leung

1 个答案:

答案 0 :(得分:5)

您遇到的问题是CheckBox不知道dataType1.IsChecked的值何时发生变化。要解决此问题,请将dataType1更改为:

class dataType1 : INotifyPropertyChanged
{ 
    public string ItemName { get; set; }

    private bool isChecked;
    public bool IsChecked 
    {
        get { return isChecked; }
        set 
        {
            if (isChecked != value)
            {
                isChecked = value;
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs("IsChecked"));
                }
            }
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
}

现在,当属性值发生变化时,它会通过引发PropertyChanged事件来通知绑定它需要更新。

此外,还有更简单的方法可以避免您编写尽可能多的样板代码。我使用BindableObject from Josh Smith