WPF DataGrid绑定到接口时如何添加空行

时间:2014-08-20 23:23:44

标签: wpf datagrid interface

我正在尝试通过使用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>()的任何答案。

最终代码

我接受了约翰的回答,并通过为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; }
}

1 个答案:

答案 0 :(得分:3)

This answer has what you want即:

    private readonly BindingList<IDataItem> _itemList = new BindingList<IDataItem>();

    public ViewModel()
    {
        _itemList.AllowNew = true;
        _itemList.AddingNew += (sender, e) => e.NewObject = new DataItem(...); 
        // I don't think you want to show your IoC here
    }

    public BindingList<IDataItem> ItemList
    {
        get { return _itemList; }
    }