我有一个大小为4的bool数组,我想将每个单元格绑定到不同的控件。 此bool数组表示4个状态(false =失败,true =成功)。 这个bool数组是一个有类的属性:
class foo : INotifyPropertyChanged {
...
private bool[] _Statuses;
public bool[] Statuses
{
get {return Statuses;}
set {
Statuses = value;
OnPropertyChanged("Statuses");
}
}
在XAML中有4个控件,每个控件绑定到数组的一个单元格:
... Text="{Binding Path=Statuses[0]}" ...
... Text="{Binding Path=Statuses[1]}" ...
... Text="{Binding Path=Statuses[2]}" ...
... Text="{Binding Path=Statuses[3]}" ...
问题是只有当我更改数组本身时才会引发通知事件,而当我更改数组中的一个值时,不会引发通知事件,即下一个代码行引发事件:
Statuses = new bool[4];
但下一行不会引发事件:
Statuses [0] = true;
每次更换一个单元格时,如何引发事件?
答案 0 :(得分:8)
您需要将状态公开为索引器,然后引发一个属性更改事件,指示索引器已更改。
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));
}
}
请参阅此博文:
http://10rem.net/blog/2010/03/08/wpf---silverlight-quick-tip-inotifypropertychanged-for-indexer
答案 1 :(得分:3)
它不会引发事件,因为Array
本身并没有实现INotifyPropertyChanged
。您可以使用与原始数组不同的容器(任何实现INotifyCollectionChanged
ObservableCollection<T>
RaisePropertyChanged("Statuses")
应该执行的操作)或者每次更新状态数组时都必须调用INotifyPropertyChanged
,如提到的那样在另一个答案中,使用一个实现包含4个属性的{{1}}的类。
答案 2 :(得分:1)
使用Array
时无法执行此操作。更改Array
上任意索引处的值不会引发UI
所需的更改通知。
您可以使用具有四个实现INotifyPropertyChanged
接口的属性的类吗?