0

我有一个带有 DataGrid 的 Silverlight 应用程序,其中包含一些自定义列,并且一切运行良好。然后我更新到 VS 2008 SP1 的 Silverlight 3 工具并重建它。现在它有以下问题:

  1. 修改集合时不会添加行。ItemsSource 属性(并且一直是)设置为 ObservableCollection 实例,该实例会在其内容发生更改时发出通知。这对 Silverlight 2 来说效果很好。但是,在 Silverlight 3 中,要让它完全正常工作,我现在必须为空,然后重新设置 ItemsSource - 这似乎我在隐藏一个更大的问题,但我无法弄清楚那是什么可能。

  2. 我不能再选择一行或一个单元格了。如果幸运的话,我可以在它停止工作之前选择一整行。

  3. 我不能编辑任何东西。我怀疑这与前一点有关。

我会在可能的情况下发布一些资源,但首先我必须将其精简到最低限度。与此同时,我希望有人可能对这里可能发生的事情有所了解。我对后两点的直觉是我的绑定不再起作用,但这只是一个猜测,如果是这样,我不知道是哪一个。

感谢任何人都可以提供的任何帮助。

更新
所以,我终于将我的问题简化为一个简单的工作/不工作比较。Equals如果我覆盖我的元素类型,似乎会出现问题。一旦我这样做,ObservableCollection似乎包含该类型的东西就会发生奇怪的事情,并且我的应用程序会中断。为了使它更有趣,有一个检查以确保重复的项目甚至不会接近被添加到集合中。我不完全知道为什么ObservableCollection在插入项目时需要比较相等性(堆栈跟踪表明它正在使用IndexAt),但这似乎导致了问题。

那么,有什么想法吗?

4

2 回答 2

1

我的一些代码有完全相同的问题。我做的时候效果很好

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

但不是在我做的时候

ObservableObjectCollection observableCollection = stuff;
myDataGrid.ItemsSource = observableCollection;

我猜他们改变了绑定:(输入你的 ObservableCollection ,这可能会起作用。

于 2009-07-15T12:21:46.833 回答
0

我终于找到了导致我描述的症状的最初问题。我很惭愧地承认这一点,但这是缺少return关键字的简单错误。我的Equals覆盖总是返回false并且在 SL3 下,这导致了一些问题(SL2 似乎不在乎)。

所以,这个问题就解决了。让这对每个人来说都是一个教训,如果您Equals在引用类型(或任何类型)中覆盖,请确保它确实有效。单元测试会发现这一点。真丢人。

于 2010-03-12T20:27:07.870 回答