代码之家  ›  专栏  ›  技术社区  ›  Jeff Yates

数据报中的什么变化意味着它将不再工作?

  •  0
  • Jeff Yates  · 技术社区  · 15 年前

    我有一个Silverlight应用程序,它有一个包含一些自定义列的DataGrid,所有这些都运行良好。然后我更新到Silverlight 3 Tools for VS 2008 SP1并重新构建它。目前存在以下问题:

    1. 修改集合时不添加行。itemssource属性(并且始终)设置为ObservableCollection实例,该实例在其内容更改时发出通知。这对Silverlight2很管用。但是,在Silverlight 3中,要使此功能正常工作,我现在必须为空,然后重新设置itemssource-这似乎是在隐藏一个更大的问题,但我不知道这可能是什么。

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

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

    我可以发布一些消息源,但首先我必须将其剥离到最低限度。同时,我希望有人能知道这里发生了什么。我对第二点的直觉是我的绑定不再有效,但这只是一个猜测,如果是这样的话,我不知道是哪一个。

    感谢任何人提供的帮助。

    更新
    所以,我最终把我的问题归结为一个简单的工作/不工作的比较。如果我忽略了,问题似乎就出现了 Equals 在我的元素类型中。一旦我这样做,就会有奇怪的事情发生在 ObservableCollection 它似乎包含了那个类型,我的应用程序中断了。为了让它更有趣,有一个检查来确保重复的项目甚至不会接近添加到集合中。我不知道为什么 可观测采集 插入项时需要比较相等性(堆栈跟踪指示它正在使用 IndexAt )但这似乎引发了问题。

    有什么想法吗?

    2 回复  |  直到 14 年前
        1
  •  1
  •   R4cOOn    15 年前

    我的一些代码也有同样的问题。我做的时候它很值钱

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

    但我做的时候没有

    ObservableObjectCollection observableCollection = stuff;
    myDataGrid.ItemsSource = observableCollection;
    

    我想他们把装订改了:( 输入你的ObservableCollection,这可能有效。

        2
  •  0
  •   Jeff Yates    14 年前

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

    所以这个问题就解决了。如果你忽略了这一点,就让它成为每个人的一个教训吧。 等于 在引用类型(或任何类型)中,确保它实际工作。单元测试会捕捉到这一点。我感到羞耻。

    推荐文章