如何使用 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 进行编辑。
我有一个 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 进行编辑。