如何为bool []中的值实现INotifyPropertyChanged功能?

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)

每次更换一个单元格时,如何引发事件?

Col*_*inE 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));
    }
}
Run Code Online (Sandbox Code Playgroud)

看到这篇博文:

http://10rem.net/blog/2010/03/08/wpf---silverlight-quick-tip-inotifypropertychanged-for-indexer


Szy*_*zga 3

它不会引发事件,因为Array它本身没有实现INotifyPropertyChanged. 您可以使用与原始数组不同的容器(任何INotifyCollectionChanged喜欢的实现都应该这样做),或者每次更新 Statuses 数组时都ObservableCollection<T>必须调用,或者,如另一个答案中提到的,使用一个包含 4 个属性的实现类。RaisePropertyChanged("Statuses")INotifyPropertyChanged