2011-02-17 147 views
0

這從我的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[]工程。爲什麼?

回答

1

根據mamadero2在this threadItem[index]只在Silverlight 4

工作(我決不會想到,Silverlight支持的東西,WPF沒有)

+0

這是有史以來最爛的廢話。任何方法來解決這個問題? – Aphex 2011-02-17 16:37:47