如何使用INotifyPropertyChanged更新数组绑定?

时间:2008-09-18 08:36:28

标签: wpf

假设我有一个班级:

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}]”,索引)并且它不起作用)。这是WPF中的错误,是否有替代语法,或者仅仅是INotifyPropertyChanged没有普通绑定那么强大?

4 个答案:

答案 0 :(得分:13)

感谢Cameron的建议,我找到了正确的语法,即:

Item[]

更新绑定到该索引属性的所有内容(所有索引值)。

答案 1 :(得分:6)

避免代码中的字符串,您可以使用常量Binding.IndexerName,实际上是"Item[]"

new PropertyChangedEventArgs(Binding.IndexerName)

答案 2 :(得分:5)

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

所有索引和

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

单个项目

问候,jerod

答案 3 :(得分:3)

不确定这是否有效,但反射器显示索引属性的get和set方法称为get_Item和set_Item。也许你可以试试Item,看看是否有效。