2009-07-12 86 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