yom*_*omi 10 wpf binding inotifypropertychanged
我有一个大小为4的bool数组,我想将每个单元格绑定到不同的控件.此bool数组表示4个状态(false =失败,true =成功).这个bool数组是一个类:
class foo : INotifyPropertyChanged {
...
private bool[] _Statuses;
public bool[] Statuses
{
get {return Statuses;}
set {
Statuses = value;
OnPropertyChanged("Statuses");
}
}
Run Code Online (Sandbox Code Playgroud)
在XAML中有4个控件,每个控件绑定到数组的一个单元:
... Text="{Binding Path=Statuses[0]}" ...
... Text="{Binding Path=Statuses[1]}" ...
... Text="{Binding Path=Statuses[2]}" ...
... Text="{Binding Path=Statuses[3]}" ...
Run Code Online (Sandbox Code Playgroud)
问题是只有当我更改数组本身时才会引发notify事件,而当我在数组中更改一个值时不会引发通知事件,即下一个代码行引发事件:
Statuses = new bool[4];
Run Code Online (Sandbox Code Playgroud)
但下一行不会引发事件:
Statuses [0] = true;
Run Code Online (Sandbox Code Playgroud)
每次更换一个单元格时,如何引发事件?
您需要将状态公开为索引器,然后引发属性更改事件,指示索引器已更改.
private bool[] _Statuses;
public bool this[int index]
{
get { return _Statuses[index]; }
set
{
_Statuses[index] = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(Binding.IndexerName));
}
}
Run Code Online (Sandbox Code Playgroud)
看到这篇博文:
http://10rem.net/blog/2010/03/08/wpf---silverlight-quick-tip-inotifypropertychanged-for-indexer
它不会引发事件,因为Array它本身没有实现INotifyPropertyChanged. 您可以使用与原始数组不同的容器(任何INotifyCollectionChanged喜欢的实现都应该这样做),或者每次更新 Statuses 数组时都ObservableCollection<T>必须调用,或者,如另一个答案中提到的,使用一个包含 4 个属性的实现类。RaisePropertyChanged("Statuses")INotifyPropertyChanged
| 归档时间: |
|
| 查看次数: |
3154 次 |
| 最近记录: |