如何使用 WPF-DataGrid 向 Fluent-nHibernate-Data 添加新行?

How to use WPF-DataGrid to add new rows to Fluent-nHibernate-Data?

我有一个 WPF-DataGrid 来显示 nHibernate 数据。 xaml 看起来像这样:

<DataGrid x:Name="myDataGrid" AddingNewItem="myDataGrid_AddingNewItem" CanUserAddRows="true"/>

为了在 dataGrid 中显示数据,我使用了这段代码

    public MainWindow()
    {
        InitializeComponent();
        var erg = from p in m_Dbsession.Query<LovTestData>()
        select new LovTestDataDatasource
        {
            SomeString = p.SomeString,
            SomeOtherString = p.SomeOtherString
        };

        myDataGrid.ItemsSource = erg.ToList();
    }

我的数据源类如下​​所示:

class LovTestDataDatasource : IEditableObject
{ 
    public LovTestDataDatasource()
    { }

    public string SomeOtherString { get; internal set; }
    public string SomeString { get; internal set; }

    public void BeginEdit()
    {

    }

    public void CancelEdit()
    {

    }

    public void EndEdit()
    {

    }
}

问题是,我看不到添加新行的可能性。底部有一个空行,但不可编辑。插入键也不起作用,并且从未调用 myDataGrid_AddingNewItem。

我做错了什么?

编辑:

这似乎与我的 Datasource-class 有关,因为当我将 ItemsSoure 设置更改为:

        var erg = from p in m_Dbsession.Query<LovTestData>()
                  select p;

        myDataGrid.ItemsSource = erg.ToList();

我可以编辑该行并调用 myDataGrid_AddingNewItem。

另一个编辑:

我试过了:

        var erg = from p in m_Dbsession.Query<LovTestData>()
                  select new LovTestDataDatasource
                  {
                      SomeString = p.SomeString,
                      SomeOtherString = p.SomeOtherString
                  };
        myDataGrid.ItemsSource = new ObservableCollection<LovTestDataDatasource>(erg.ToList());

但这没有用。

将数据源中的内部设置器 class 更改为 public。

public string SomeOtherString { get; set; }
public string SomeString { get; set; }

如果将它们保留为内部,则 PresentationFramework 没有这些属性的可访问设置器(因为它们来自不同的程序集)。它们被视为只读,因此无法从 DataGrid 进行编辑。