這從我的related question出現。我目前有以下綁定:更新綁定到對象[屬性](Binding.IndexerName怪異)的綁定
myBinding = Binding("[foo]")
myBinding.Mode = System.Windows.Data.BindingMode.TwoWay
myBinding.Source = obj
acheckbox.SetBinding(CheckBox.IsCheckedProperty, myBinding)
acheckbox.DataContext = obj
這將看看obj[foo]
。 UI將更新源代碼 - 我可以檢查複選框,並且obj[foo]
已更改。但是,反過來不起作用。在代碼更改obj[foo]
不更新用戶界面,即使有這樣的代碼手動調用OnPropertyChanged
:
obj[foo] = False
obj._OnPropertyChanged(obj, System.ComponentModel.PropertyChangedEventArgs("[foo]"))
問題可能出在參數OnPropertyChanged
。一些挖(和幫助HB)透露了這一職位: http://10rem.net/blog/2010/03/08/wpf---silverlight-quick-tip-inotifypropertychanged-for-indexer
如果您正在創建的數據源 那些(例如,您正在構建 自己ObservableDictionary),你 可能想知道如何在earth您發射 合適
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[]
工程。爲什麼?
這是有史以來最爛的廢話。任何方法來解決這個問題? – Aphex 2011-02-17 16:37:47