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)