这是我的代码:
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
答案 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。