我有一个带有DataGrid的Silverlight应用程序,其中包含一些自定义列,并且一切运行良好。然后我更新了VS 2008 SP1的Silverlight 3工具并重建了它。现在它有以下问题:
修改集合时不会添加行。 ItemsSource属性(并且始终被设置)设置为ObservableCollection实例,该实例通知其内容何时更改。这对Silverlight 2工作得很好。但是,在Silverlight 3中完全可以工作,我现在必须为null然后重新设置ItemsSource - 这似乎我隐藏了一个更大的问题,但我无法解决这个问题可能是。
我不能再选择行或单元格了。如果我很幸运,我可以在它停止工作之前选择一整行。
我无法编辑任何内容。我怀疑这与前一点有关。
当我能够的时候,我会发布一些消息来源,但首先我必须把它剥离到最低限度。与此同时,我希望有人可能知道这里可能会发生什么。我对后两点的直觉是我的绑定不再有效,但这只是一个猜测,如果是这样,我不知道哪些。
感谢任何人都可以提供的任何帮助。
更新
所以,我最终将我的问题减少到一个简单的工作/不起作用的比较。如果我在元素类型中覆盖Equals
,似乎会出现问题。一旦我这样做,在ObservableCollection
中包含该类型的东西很奇怪,似乎,我的应用程序中断了。为了使它更有趣,有一个检查,以确保重复的项目甚至没有接近添加到集合。我不确切地知道为什么ObservableCollection
在插入项时需要比较相等性(堆栈跟踪表明它正在使用IndexAt
)但这似乎导致了问题。
那么,有什么想法吗?
答案 0 :(得分:1)
我的一些代码遇到了完全相同的问题。我正在做的时候好像很好。
ObservableCollection<MyType> typedObservableCollection = stuff;
myDataGrid.ItemsSource = typedObservableCollection;
但不是在我做的时候
ObservableObjectCollection observableCollection = stuff;
myDataGrid.ItemsSource = observableCollection;
我猜他们改变了绑定:( 输入您的ObservableCollection,这可能有用。
答案 1 :(得分:0)
我终于找到了导致我描述的症状的最初问题。我很惭愧承认这一点,但这是一个缺少return
关键字的简单错误。我的Equals
覆盖始终返回false
,而在SL3下,这会导致一些问题(SL2似乎并不关心,似乎)。
所以,这个问题就解决了。如果您在引用类型(或任何类型)中覆盖Equals
,请将其作为每个人的一课,确保它确实有效。单元测试会抓住这个。对我感到羞耻。