2011-02-08 91 views
2

總之,我的問題是WPF DataGrid不會讓我選擇除第一行以外的任何內容。當我第一次填寫數據時,沒有選擇行。接下來,無論我點擊哪一行,第一行都會亮起。當我使用OneWayToSource綁定SelectedItem屬性時,我發現確實選擇了正確的行。如果我選擇再次點擊另一行,則不會發生任何事情:界面仍停留在第一行,SelectedItem屬性保留以前正確的值。在這一點上,我必須按住ctrl-點擊第一行行才能取消選擇。這使我可以重複上述情況。WPF DataGrid無法更改所選行:卡在第一行

換句話說: - 用戶界面似乎與實際選擇的內容不同步。 - 需要按住Ctrl鍵來取消選擇。 - 即使SelectedItem屬性指示選擇了不同的行,也必須在第一行執行Ctrl-單擊操作。

我明白這是奇怪的行爲。我試圖在一個單獨的項目中複製它,但沒有成功。因此,我只是把它扔在那裏,看看有沒有人有任何想法,爲什麼它可能會這樣做?

我在單獨項目中沒有重複的唯一事情是使用MEF作爲View/ViewModel連接。其他一切都是一樣的。

編輯:我剛剛用一個ListBox替換了所說的DataGrid,並且遇到了同樣的問題。我使用Snoop來試圖找出可能應用於控件的內容,這會改變它的行爲。

+0

由於這顯然取決於您的具體代碼,如果您可以提供上述代碼將是有幫助的。 – 2011-02-08 16:31:24

回答

3

我的問題是,我添加到DataGrid和ListBox的對象已覆蓋Equals()和GetHashCode()函數。這些真的搞砸了兩個控件呈現哪個項目被選中的方式,因此解釋了SelectedItem問題。最後,所有問題都通過簡單地刪除/修復這些覆蓋來解決。

Woot!

+0

在這裏發現了類似的問題:http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/64529f60-fe7b-4cf6-a686-3933e22e5169 – Brett 2011-02-08 19:44:40