2009-12-03 69 views
4

我正試圖將一個字典綁定到一個ListView,它是一個帶有2個文本框的網格的項目模板常量。理想情況下,我希望能夠修改ListView中顯示的KeyValuePair的鍵值和值。那可能嗎?Dictionary到ListView TwoWay綁定 - 可能嗎?

+0

是的,但我不明白的方式來做到這一點沒有intemedite類,就像一個視圖模型。你直接綁定到字典是至關重要的嗎? – angrifel 2009-12-03 22:47:23

+0

這是首選。字典應該保存我的應用程序的設置等。 – Maciek 2009-12-03 22:59:38

回答

2

你要找的是什麼東西類似於一個ObservableCollection<T>但對於一個字典。谷歌搜索的位發現從Dr. WPF on building an ObservableDictionary以下:

優點和缺點

使用當然可觀察到的詞典,好處是,該詞典可以作爲的ItemsSource用於數據綁定控件並您仍然可以像訪問任何其他字典一樣訪問代碼中的字典。它確實是一個對象的索引字典。 在使字典可觀察的想法中固有一些固有的限制。字典是爲了速度而建立的。當您在字典中強加可觀察集合的行爲以便框架可以綁定到它時,會增加開銷。

此外,詞典通過相同名稱的單獨的屬性暴露其ValuesKeys集合。這些集合的類型分別爲Dictionary<TKey, TValue>.ValueCollectionDictionary<TKey, TValue>.KeyCollection。這些CLR定義的集合是不可觀察的。因此,您無法直接綁定到Values集合或Keys集合,並期望收到動態集合更改通知。您必須直接綁定到可觀察字典。現在

,您可以用更新的關鍵,因爲你會需要以某種方式說服字典移動您的項目碰到的一個問題。我會建議服用WPF博士的ObservableDictionary,而不是使用KeyedCollection作爲後備存儲。這樣Key就從Item自身派生出來,並且更新自動移動ObservableDictionary中的對象。

+0

我以前見過ObservableDictionary,但我沒有運氣2主要是由於密鑰是隻讀的 – Maciek 2009-12-04 08:46:25

+0

因此,您應該使用KeyedCollection,該KeyedCollection從該項目派生密鑰。通過這種方式,您可以綁定到包含關鍵字的項目屬性,並且字典將相應地進行更新(也許)。 – user7116 2009-12-04 14:46:29

2

如果你看KeyValuePair實現它是一個鍵和值爲只讀屬性的結構,所以我的猜測是在這種情況下無法進行雙向綁定。

如果你犯了一個類繼承INotifyPropertyChange,處理字典添加和刪除的項目,當您更改鍵或只有當你正在改變也許值它的工作原理更改值。

+0

您好,我無法訪問該鏈接。 – Maciek 2009-12-03 23:00:16

+0

OK我刷新鏈接,去那裏,點擊每個鍵和值的屬性,你會看到他們是隻讀,只得到的是實現 – jmayor 2009-12-03 23:10:04

相關問題