Как использовать INotifyPropertyChanged для обновления привязки массива?

Скажем, у меня есть класс:

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

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

Я могу связать эти два свойства, используя "{Binding Path = Bar}" и "{Binding Path = [x]}". Хорошо.

Теперь скажем, что я хочу реализовать 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;
}

Что входит в обозначенную часть????? (Я пробовал string.Format( "[{0}]", index), и он не работает). Является ли это ошибкой в ​​WPF, есть ли альтернативный синтаксис, или это просто, что INotifyPropertyChanged не так сильно, как нормальное связывание?

Ответы

Ответ 1

Благодаря предложению Камерона, я нашел правильный синтаксис, который:

Item[]

Что обновляет все (все значения индекса), привязанные к этому индексированному свойству.

Ответ 2

Избегая строк в коде, вы можете использовать константу Binding.IndexerName, которая на самом деле "Item[]"

new PropertyChangedEventArgs(Binding.IndexerName)

Ответ 3

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

для всех индексов и

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

для одного элемента

приветствия, jerod

Ответ 4

Не знаю точно, будет ли это работать, но рефлектор показывает, что методы get и set для индексированного свойства называются get_Item и set_Item. Возможно, вы могли бы попробовать Item и посмотреть, работает ли это.