property event ejemplo change wpf

wpf - event - ¿Cómo uso INotifyPropertyChanged para actualizar un enlace de matriz?



wpf inotifypropertychanged (4)

Digamos que tengo una clase:

class Foo { public string Bar { get { ... } } public string this[int index] { get { ... } } }

Puedo enlazar a estas dos propiedades usando "{Binding Path = Bar}" y "{Binding Path = [x]}". Multa.

Ahora digamos que quiero implementar INotifyPropertyChanged:

class Foo : INotifyPropertyChanged { public string Bar { get { ... } set { ... if( PropertyChanged != null ) { PropertyChanged( this, new PropertyChangedEventArgs( "Bar" ) ); } } } public string this[int index] { get { ... } set { ... if( PropertyChanged != null ) { PropertyChanged( this, new PropertyChangedEventArgs( "????" ) ); } } } public event PropertyChangedEventHandler PropertyChanged; }

¿Qué va en la parte marcada ????? (He intentado string.Format ("[{0}]", index) y no funciona). ¿Es esto un error en WPF, hay una sintaxis alternativa, o es simplemente que INotifyPropertyChanged no es tan poderoso como el enlace normal?


Gracias a la sugerencia de Cameron, encontré la sintaxis correcta, que es:

Item[]

Lo cual actualiza todo (todos los valores de índice) ligados a esa propiedad indexada.


No sé con certeza si esto funcionará, pero el reflector muestra que los métodos get y set para una propiedad indexada se llaman get_Item y set_Item. Tal vez podrías probar Item y ver si funciona.


PropertyChanged( this, new PropertyChangedEventArgs( "Item[]" ) )

para todos los índices y

PropertyChanged( this, new PropertyChangedEventArgs( "Item[" + index + "]" ) )

para un solo artículo

saludos, jerod


Al evitar cadenas en su código, puede usar la constante Binding.IndexerName , que en realidad es "Item[]"

new PropertyChangedEventArgs(Binding.IndexerName)