【发布时间】:2014-10-14 11:30:58
【问题描述】:
我正在尝试通过使用CanUserAddRows="True" 来设置一个 DataGrid 在末尾有一个空白行
WPF datagrid allow user to add rows? 和 WPF DataGrid: Blank Row Missing 等多个其他问题也回答了同样的问题
这两个问题的答案中提到的关键点之一是
确保 ObeservableCollection 中的对象具有默认值 无参数构造函数。
但这是我有问题的地方。我绑定的集合是这样定义的:
public ObservableCollection<IDataItem> ItemList { get; }
所以我当然不能定义无参数构造函数,因为我绑定到一个接口。那么我该怎么做呢?
我知道,如果绑定到具体对象的集合,那么一切正常。
FWIW 我正在尝试通过UnityContainer 使用 IOC(第一次),因此欢迎通过Resolve<IDataItem>() 提供任何答案。
最终代码
我接受了 Johan 的回答,并通过为 UnityContainer 创建一个单例工厂来融入我自己的 IOC 容器想法。这导致代码看起来像(使用 Johan 的代码)
void RegisterTypes()
{
IUnityContainer container = UnityFactory.Instance.Container;
container.RegisterType<IDataItem, DataItem >(new InjectionConstructor());
}
..
private readonly BindingList<IDataItem> _itemList = new BindingList<IDataItem>();
public ViewModel()
{
_itemList.AllowNew = true;
IUnityContainer container = UnityFactory.Instance.Container;
_itemList.AddingNew += (sender, e) => { e.NewObject = container.Resolve<IDataItem>(); };
}
public BindingList<IDataItem> ItemList
{
get { return _itemList; }
}
【问题讨论】: