Ответ 1
Благодаря предложению Камерона, я нашел правильный синтаксис, который:
Item[]
Что обновляет все (все значения индекса), привязанные к этому индексированному свойству.
Скажем, у меня есть класс:
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 не так сильно, как нормальное связывание?
Благодаря предложению Камерона, я нашел правильный синтаксис, который:
Item[]
Что обновляет все (все значения индекса), привязанные к этому индексированному свойству.
Избегая строк в коде, вы можете использовать константу Binding.IndexerName
, которая на самом деле "Item[]"
new PropertyChangedEventArgs(Binding.IndexerName)
PropertyChanged( this, new PropertyChangedEventArgs( "Item[]" ) )
для всех индексов и
PropertyChanged( this, new PropertyChangedEventArgs( "Item[" + index + "]" ) )
для одного элемента
приветствия, jerod
Не знаю точно, будет ли это работать, но рефлектор показывает, что методы get и set для индексированного свойства называются get_Item и set_Item. Возможно, вы могли бы попробовать Item и посмотреть, работает ли это.