DataGrid中发生了哪些变化,这意味着它将不再起作用?

时间:2009-07-12 07:12:44

标签: silverlight-3.0 datagrid

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

  1. 修改集合时不会添加行。 ItemsSource属性(并且始终被设置)设置为ObservableCollection实例,该实例通知其内容何时更改。这对Silverlight 2工作得很好。但是,在Silverlight 3中完全可以工作,我现在必须为null然后重新设置ItemsSource - 这似乎我隐藏了一个更大的问题,但我无法解决这个问题可能是。

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

  3. 我无法编辑任何内容。我怀疑这与前一点有关。

  4. 当我能够的时候,我会发布一些消息来源,但首先我必须把它剥离到最低限度。与此同时,我希望有人可能知道这里可能会发生什么。我对后两点的直觉是我的绑定不再有效,但这只是一个猜测,如果是这样,我不知道哪些。

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

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

    那么,有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我的一些代码遇到了完全相同的问题。我正在做的时候好像很好。

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

但不是在我做的时候

ObservableObjectCollection observableCollection = stuff;
myDataGrid.ItemsSource = observableCollection;

我猜他们改变了绑定:( 输入您的ObservableCollection,这可能有用。

答案 1 :(得分:0)

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

所以,这个问题就解决了。如果您在引用类型(或任何类型)中覆盖Equals,请将其作为每个人的一课,确保它确实有效。单元测试会抓住这个。对我感到羞耻。