14 Stimmen

Wie kann ich INotifyPropertyChanged verwenden, um eine Array-Bindung zu aktualisieren?

Nehmen wir an, ich habe eine Klasse:

class Foo
{
  public string Bar
  {
    get { ... }
  }

  public string this[int index]
  {
    get { ... }
  }
}

Ich kann diese beiden Eigenschaften mit "{Binding Path=Bar}" und "{Binding Path=[x]}" binden. Gut.

Nehmen wir nun an, ich möchte INotifyPropertyChanged implementieren:

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

Was kommt in den mit ????? gekennzeichneten Teil (ich habe string.Format("[{0}]", index) ausprobiert, aber es funktioniert nicht). Ist dies ein Fehler in WPF, gibt es eine alternative Syntax, oder ist es einfach, dass INotifyPropertyChanged nicht so mächtig wie normale Bindung ist?

13voto

stusmith Punkte 13805

Dank Camerons Vorschlag habe ich die richtige Syntax gefunden, die lautet:

Item[]

Dadurch wird alles (alle Indexwerte) aktualisiert, was an diese indizierte Eigenschaft gebunden ist.

6voto

Adi Lester Punkte 24217

Um Strings in Ihrem Code zu vermeiden, können Sie die Konstante Binding.IndexerName was eigentlich ein "Item[]"

new PropertyChangedEventArgs(Binding.IndexerName)

5voto

jEROD Punkte 51
PropertyChanged( this, new PropertyChangedEventArgs( "Item[]" ) )

für alle Indizes und

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

für eine einzelne Position

grüsse, jerod

3voto

Cameron MacFarland Punkte 67889

Ich weiß nicht sicher, ob das funktioniert, aber Reflektor zeigt, dass die Get- und Set-Methoden für eine indizierte Eigenschaft get_Item und set_Item heißen. Vielleicht können Sie Item ausprobieren und sehen, ob das funktioniert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X