propertychangedeventargs onpropertychanged ejemplo wpf binding inotifypropertychanged

wpf - onpropertychanged - propertychangedeventargs



¿Cómo se logra la funcionalidad INotifyPropertyChanged para los valores en un bool[]? (3)

Tengo una matriz bool de tamaño 4 y quiero vincular cada celda a un control diferente. Esta matriz bool representa 4 estados (falso = error, verdadero = éxito). Esta matriz bool es una propiedad de una clase:

class foo : INotifyPropertyChanged { ... private bool[] _Statuses; public bool[] Statuses { get {return Statuses;} set { Statuses = value; OnPropertyChanged("Statuses"); } }

En XAML hay 4 controles, cada uno unido a una celda de la matriz:

... Text="{Binding Path=Statuses[0]}" ... ... Text="{Binding Path=Statuses[1]}" ... ... Text="{Binding Path=Statuses[2]}" ... ... Text="{Binding Path=Statuses[3]}" ...

El problema es que el evento de notificación se genera solo cuando cambio la matriz en sí y no se genera cuando cambio un valor dentro de la matriz, es decir, la próxima línea de código plantea el evento:

Statuses = new bool[4];

pero la siguiente línea no plantea el evento:

Statuses [0] = true;

¿Cómo puedo plantear el evento cada vez que se cambia una celda?


No plantea el evento porque Array no implementa INotifyPropertyChanged . Puede usar un contenedor diferente de la matriz primitiva (todo lo que implemente INotifyCollectionChanged le INotifyCollectionChanged ObservableCollection<T> ) o debe llamar a RaisePropertyChanged("Statuses") cada vez que actualice la matriz de estados O, como se menciona en otra respuesta, use una clase que implemente INotifyPropertyChanged que contenga 4 propiedades.


No puedes hacerlo mientras usas una Array . Cambiar un valor en cualquier índice de una Array no Array una notificación de cambio requerida por la UI .

¿Puedes usar una clase con cuatro propiedades que implemente la interfaz INotifyPropertyChanged ?


Necesita exponer sus estados como un indexador, luego generar un evento de cambio de propiedad que indique que el indexador ha cambiado.

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)); } }

Ver esta publicación en el blog:

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