2009-07-12 87 views
0

我有一個包含一些自定義列的DataGrid的Silverlight應用程序,所有工作都很好。然後我更新了VS 2008 SP1的Silverlight 3工具並重新構建了它。現在它有以下問題:DataGrid中發生了哪些變化,意味着它不再起作用了?

  1. 集合被修改時不會添加行。 ItemsSource屬性被設置爲一個ObservableCollection實例,並通知其內容何時更改。這對於Silverlight 2來說工作得很好。但是,在Silverlight 3中完全可以實現這一點,現在我必須清零然後重新設置ItemsSource - 這看起來好像隱藏了一個更大的問題,但我無法弄清楚那是什麼可能。

  2. 我無法再選擇一行或一個單元格。如果我很幸運,我可以在停止工作之前選擇一行。

  3. 我無法編輯任何東西。我懷疑這與前一點有關。

我會後一些來源,當我能夠,但首先我必須剝離下來到最低限度。與此同時,我希望有人對這裏可能發生的事情有一些瞭解。我對後面兩點的直覺是我的綁定不再有效,但這只是一種猜測,如果是這樣的話,我不知道哪一個。

感謝任何人可能提供的幫助。

更新
所以,我終於縮小我的問題到一個簡單的工作/不工作比較。如果我在我的元素類型中覆蓋Equals,問題似乎就會發生。只要我這樣做,在ObservableCollection中發生了一些奇怪的事情,它包含該類型,看起來和我的應用程序中斷。爲了使它更有趣,有一個檢查來確保重複的項目甚至不會被添加到集合中。我不完全知道爲什麼ObservableCollection插入項目時需要比較相等性(堆棧跟蹤表示它使用IndexAt),但這似乎會導致此問題。

那麼,有什麼想法?

回答

0

我終於找到了導致我描述的症狀的最初的問題,我很慚愧地承認它,但這是關鍵字丟失return的簡單錯誤,我的Equals覆蓋總是返回false在SL3下,這造成了一些問題(SL2似乎並不在意)。

所以,這個問題就解決了。如果你在引用類型(或任何類型)中覆蓋Equals,請確保它實際工作。單元測試會抓住這個。對我感到羞恥。

1

我對我的一些代碼有完全相同的問題。據wortking很好,當我在做

ObservableCollection<MyType> typedObservableCollection = stuff; 
myDataGrid.ItemsSource = typedObservableCollection; 

而不是當我在做

ObservableObjectCollection observableCollection = stuff; 
myDataGrid.ItemsSource = observableCollection; 

我猜他們改變了結合:( 鍵入您的ObservableCollection和可能的工作。

+0

謝謝,但我的收藏已被輸入。 +1雖然有用的信息。 – 2009-07-15 17:25:38