【问题标题】:Datagrid results do not make senseDatagrid 结果没有意义
【发布时间】:2021-03-01 15:00:09
【问题描述】:

我一直在 WPF 中使用 DataGrid 并取得了很好的效果。但是,经过一些更改,它现在给了我意想不到的结果。

之前:我在一个页面上有一个DataGridDataContext 设置为 List 对象,该对象是从存在于同一 WPF 项目中的类创建的。 DataGrid底部的空行,用于添加新记录,可见

之后:同一页面,同一DataGrid。但是现在 List 对象来自同一解决方案中的类库项目。 EXACT 相同的代码,但现在已被提取到类库中。数据网格底部用于添加新记录的空行可见。

WTF?

【问题讨论】:

  • 我仍在寻找这个问题的答案。同样,类中的任何内容或 UI 本身都没有改变。我的 VS 解决方案有一个同时包含 UI 和类的项目。现在我有两个项目(原始的 WPF 和新的类库),类中的代码相同,但该类现在在类库项目中。最终结果根本没有意义。

标签: c# wpf datagrid


【解决方案1】:

我想我终于有了答案。基本上,我错了,我确实改变了班级的一小部分。当我读到这个答案时,“灯泡”亮了:How do I create a new row in WPF DataGrid when it is bound to an XmlDataProvider?

底线:您要绑定的类需要有一个默认构造函数才能显示可编辑的行!

在我的代码中,我确实更改了没有默认设置的构造函数(我完全忘记了这一点)。将默认构造函数重新添加到类中可以解决问题。

【讨论】:

    【解决方案2】:

    可能是一些安全问题,甚至是错误。我刚看了this

    我发现如果您访问 ListCollectionView 的 CanAddRow 一次 在您使用该系列之前, 神奇的 CanUserAddRows 的 DataGrid 变为真。奇怪!

    IEditableCollectionView ecv = new ListCollectionView(myRecordCache);
    bool b = ecv.CanAddNew;   // dummy access
    MyGrid.DataContext = ecv;
    

    【讨论】:

    • 我明白你在说什么,但我没有以任何不同于它工作时的方式设置 DataContext。同样,唯一改变的是生成对象列表的类的位置。
    • 我给你积分是因为你一贯的帮助。谢谢。
    【解决方案3】:

    这是一个什么样的列表?它的公开可见界面是否允许添加项目,还是现在是只读列表(例如 IEnumerable、ICollection?

    【讨论】:

    • 它只是一个 System.Collection.Generic 列表,没什么特别的。列表本身由自定义对象组成。代码本身并没有改变,只是从 WPF 项目变成了类库项目
    • 这不应该仅仅通过将具有您绑定 ItemSource 的属性的类移动到不同的程序集来发生,其他的东西必须随之改变。
    • 这真是奇怪的部分 - 没有其他任何改变。我实际上只是在解决方案中的两个项目之间拖放,将其从 WPF 项目中删除,然后更改对新类库的引用,仅此而已。它只是没有意义。
    【解决方案4】:

    我在设置 DataGrid 属性 IsReadOnly="True" 时遇到了同样的问题。检查您是否有相同的设置并尝试将其删除以查看会发生什么。

    【讨论】:

    • 这是一个很好的建议,我试过了,但我得到了相同的(不需要的)结果。同样,UI 端没有任何变化,唯一的区别是 DataContext 列表对象的来源。
    猜你喜欢
    • 1970-01-01
    • 2015-03-28
    • 2011-09-05
    • 2014-11-17
    • 2017-09-21
    • 1970-01-01
    • 2023-02-07
    • 2021-04-24
    • 1970-01-01
    相关资源
    最近更新 更多