我试图做一些相当简单的事情,并对.Net感到沮丧:
我只想让WPF DataGrid在末尾自动添加一个空行,类似于在MS Access或SQL Management Studio中的表中输入数据。
我的想法是覆盖ObservableCollection:保留一个newItem成员,我在读取Items集合时动态添加。像这样:
// Warning this code doesn't work
public class MyCollection<T> : ObservableCollection<T>
{
private T _newItem;
// there would be a constructor which would initialize _newItem
protected override IList<T> Items
{
get
{
List<T> newItems = new List<T>();
newItems.Add(_newItem);
return base.Items.Union(newItems).ToList();
}
}
}
我的代码有几个问题。首先,您不能覆盖Items属性的getter。它不可以覆盖。
其次,即使你可以,当DataGrid绑定到集合时,甚至都不会调用getter。我认为这里应该覆盖GetEnumerator方法,但当然也不能覆盖。
扩展ObservableCollection类以实现此功能的最简单方法是什么。在这一点上,它看起来像我自己必须实现整个事情,而不是从ObservableCollection继承。出于显而易见的原因,我对这个想法表示反对。
提前致谢!
答案 0 :(得分:1)
据我所知,如果你将CanUserAddRows设置为True 并且确保你的DTO类有一个空格,那么DataGrid 会在底部显示一个空白行默认构造函数。在你的情况下,这不起作用吗?
在任何情况下,您都试图通过修改数据源来解决UI问题,因此难怪您遇到问题。这清楚地表明这不是一条路。