Обновление привязки, связанной с объектом [свойство] (странность Binding.IndexerName) - PullRequest
0 голосов
/ 17 февраля 2011

Это возникло из моего связанного вопроса . В настоящее время у меня есть следующая привязка:

myBinding = Binding("[foo]")
myBinding.Mode = System.Windows.Data.BindingMode.TwoWay
myBinding.Source = obj          
acheckbox.SetBinding(CheckBox.IsCheckedProperty, myBinding)
acheckbox.DataContext = obj

Это будет выглядеть на obj[foo]. Пользовательский интерфейс будет обновлять источник просто отлично - я могу установить флажок и obj[foo] изменяется. Однако обратное не работает. Изменение obj[foo] в коде не обновляет интерфейс, даже если этот код вручную вызывает OnPropertyChanged:

obj[foo] = False
obj._OnPropertyChanged(obj, System.ComponentModel.PropertyChangedEventArgs("[foo]"))

Проблема, скорее всего, связана с аргументами OnPropertyChanged. Некоторые раскопки (и помощь от H.B.) показали этот пост: http://10rem.net/blog/2010/03/08/wpf---silverlight-quick-tip-inotifypropertychanged-for-indexer

Если вы создаете источник данных для те (например, вы строите свой собственный ObservableDictionary), вы может удивляться, как на земле вы увольняете подходящее INotifyPropertyChanged.PropertyChanged событие, чтобы сообщить системе привязки что элемент с этим именем поля или Индекс изменился.

Система переплета ищет недвижимость с именем "Item[]", определяемый константой строка Binding.IndexerName.

Другими словами, Binding.IndexerName - это константа, "Item[]", которая указывает механизму привязки на повторное сканирование всего исходного словаря.

obj._OnPropertyChanged(obj, System.ComponentModel.PropertyChangedEventArgs(Binding.IndexerName))
# equivalent to:
obj._OnPropertyChanged(obj, System.ComponentModel.PropertyChangedEventArgs("Item[]"))

К сожалению, сканирование всего исходного словаря оказывается дорогой операцией в моем коде; так что этот пост также говорит об использовании "Item[foo]" в качестве аргумента. Это именно то, что мне нужно - и это не работает! Работает только Item[]. Почему?

1 Ответ

1 голос
/ 17 февраля 2011

Согласно mamadero2 в этот поток Item[index] работает только в Silverlight 4.

(я никогда бы не подумал, что Silverlight поддерживает то, что WPF не поддерживает)

...