C# 如何以编程方式为DataGrid中的新行创建对象?

C# 如何以编程方式为DataGrid中的新行创建对象?,c#,wpf,datagrid,C#,Wpf,Datagrid,我有绑定到DataGrid的ObservableCollection。 接口就是接口 我想为用户清楚地添加新行(没有添加按钮)。我已经添加了CanUserAddRows=“true”,但它仅在dataGrid绑定到observeCollection时才起作用 如何以编程方式为新行创建新对象?要回答您的问题:“以编程方式”您只需将对象添加/插入到您的ObservableCollection——但我认为您需要前面描述的自动添加功能 问题是,框架不知道如何创建接口的实例——它只知道如何使用默认构造函数

我有绑定到DataGrid的
ObservableCollection
。 接口就是接口

我想为用户清楚地添加新行(没有添加按钮)。我已经添加了
CanUserAddRows=“true”
,但它仅在dataGrid绑定到
observeCollection
时才起作用

如何以编程方式为新行创建新对象?

要回答您的问题:“以编程方式”您只需将对象添加/插入到您的
ObservableCollection
——但我认为您需要前面描述的自动添加功能

问题是,框架不知道如何创建接口的实例——它只知道如何使用默认构造函数创建类型。
因此,您必须使用具体类型更改ObservableCollection,或者您不能使用自动功能,必须在代码隐藏中添加对象。

我最近也遇到了同样的问题。我在我的博客中发布了一个解决方案:

它主要涉及创建一个自定义ListCollectionView(其他视图也可以这样做)并将网格绑定到该视图。自定义视图有一个用于创建行的工厂方法,因为ListCollectionView中的默认实现不支持为没有默认构造函数的接口或类添加行


请注意,即使在MVVM视图模型中不使用CollectionView,而是使用常规列表或IBindingList,WPF也会为您创建特定的集合视图。查看更多详细信息

我理解,但可能是DataGrid有一些创建新元素的事件。我知道初始化NewItem,但它会在创建新元素后调用。老实说,我不知道——但这种连接只会导致“意大利面代码”——这是我努力避免的事情。这只是一种情况。另一种情况是使用没有默认构造函数的类。将代码更改为右侧。现在问题已过时,但仍未回答((我可以将您的答案标记为有用。谢谢。谢谢!将在需要时尝试在我的代码中添加此解决方案。链接当前已关闭,导致此答案不完整:/