假设我们有一个与数据源MyInformation绑定的网格视图。列之一是复选框。我想用它绑定一些东西。
ItemsSource="{Binding MyInformation}"
在ViewModel中。
public ObservableCollection<Container> MyInformation
{
get
{
if (this.myInformation == null)
{
this.myInformation = new ObservableCollection<Container>();
}
return this.myInformation;
}
set
{
if (this.myInformation != value)
{
this.myInformation = value;
this.OnPropertyChanged("MyInformation");
}
}
}
类Container有一个成员“GoodValue”。
public class Container
{
public bool GoodValue {get;set;}
//
}
我有与成员的复选框绑定。
<DataTemplate>
<CheckBox HorizontalAlignment="Center" IsChecked="{Binding GoodValue, Converter={StaticResource ShortToBooleanConverter}}" Click="CheckBox_Checked"></CheckBox>
</DataTemplate>
我没有在ViewModel中创建属性GoodValue
,因为我认为GoodValue
是Container的成员。 ObservableCollection自动包含它。
每次我从数据库中读取数据时都会出现问题。该复选框未选中。所以我怀疑我的代码。谢谢你的提示。
答案 0 :(得分:0)
你可以做两件事:
在您的类Container中实施 INotifyPropertyChanged 界面。
public class Container:INotifyPropertyChanged {
private bool _goodValue;
public string GoodValue
{
get
{
return _goodValue;
}
set
{
_goodValue = value;
OnPropertyChanged("GoodValue");
}
}
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
public event PropertyChangedEventHandler PropertyChanged;
}
如果要在集合中插入或删除新项目时通知您的视图, ObservableCollection 是有用的,但如果其中包含的对象未实现InotifyPropertyChanged,则更改为该对象的属性不会影响对视图的任何更改。