WPF数据网格 - 新条目的行不可见

3
问题在于,DataGrid中的空行没有出现,用户因此不能添加数据。 以下是代码:

System.Collections.ObjectModel.ObservableCollection<CoreVocabularyEntry> dataList = new System.Collections.ObjectModel.ObservableCollection<CoreVocabularyEntry>();
    public VocabularyToolWindow()
    {
        InitializeComponent();
        dataList.Add(new CoreVocabularyEntry { Foreign = "ja", Native = "ano" });
        ListCollectionView view = new ListCollectionView(dataList);
        WordsDataGrid.ItemsSource = dataList;
        WordsDataGrid.CanUserAddRows = true;
        MessageBox.Show(view.CanAddNew.ToString());
    }

我无法理解为什么view.CanAddNew等于false。这看起来是一个非常标准的场景,所以我可能错过了一些显而易见的东西。有人能告诉我代码有什么问题吗?CoreVocabularyEntry只是以下内容:

public struct CoreVocabularyEntry : IVocabularyEntry
{
    #region IVocabularyEntry Members

    public string Foreign
    {
        get;
        set;
    }

    public string Native
    {
        get;
        set;
    }

    #endregion
}

Thx, J.K.

2个回答

7
这可能比上面的方法更加简单。当我没有默认构造函数时,就会遇到这个问题,因此数据网格不知道如何添加新行。我的唯一构造函数涉及提供大量信息。进入列表<> 的对象中并添加一个构造函数,例如: public MyClass(){} 希望这可以帮助你!

谢谢!它帮助了我。 - Bashnia007

1

WordsDataGrid.CanUserAddRows = true; 这行代码移到设置 DataGrid 的 ItemSource 语句之前。

编辑:

刚刚注意到您没有实现 IEditableObject。如果要使用 DataGrid 的编辑功能,您需要这样做。


尝试过了,不起作用 :-(。我认为问题在于集合而不是DataGrid本身。(我使用List<T>尝试了相同的结果。 - Jan Kratochvil
糟糕,我解决了错误的 bug!在将 view.CanAddNew 设置为 itemssource 之前,请先获取它。在将其与 DataGrid 关联之前访问它似乎可以解决这个问题。 - gn22
你可以使用一个虚拟变量,例如(bool dummy = view.CanAddNew)。 - gn22
真的吗?我刚试了一下,它没解决问题。你可以复制代码给我吗?谢谢。 - Jan Kratochvil
您不需要实现IEditableObject。请参见:http://www.codeproject.com/KB/WPF/MVVM_DataGrid.aspx - JP Richardson
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接