绑定到 ObservableCollection<T> 时如何删除 DataGrid 的空白行?
Posted
技术标签:
【中文标题】绑定到 ObservableCollection<T> 时如何删除 DataGrid 的空白行?【英文标题】:How to remove DataGrid's blank row when binding to a ObservableCollection<T>? 【发布时间】:2010-11-23 03:53:44 【问题描述】:我在这里变得疯狂:
ObservableCollection<Employee> list = new ObservableCollection<Employee>();
dgEmployees.ItemsSource = list;
当您调试 list 变量时,它是空的 (list.Count =0),但后来我将它绑定到 DataGrid (WPFToolkit),它显示了一个空白行。
在即时窗口中,对于 dgEmployees.Items 它正在显示:
dgEmployees.Items[0]
NewItemPlaceholder
和
dgEmployees.Items[0].GetType()
Name = "NamedObject" FullName = "MS.Internal.NamedObject"
[System.RuntimeType]: Name = "NamedObject" FullName = "MS.Internal.NamedObject"
这似乎是在我将此 Datagrid 放入 TabControl 之后发生的,但我不确定它是否与它有关。
有人知道如何删除这个空白行吗?
【问题讨论】:
你应该接受另一个答案,它比你的要好 【参考方案1】:同样的问题在 WPF 4.0 版本的 DataGrid 中仍然存在,这是由它为 ObservableCollection ItemsSource 自动显示的添加新行引起的。将 IsReadOnly 设置为 True 恕我直言,这太激进了。 如果您不需要该行为,我通过禁用 CanUserAddRows 属性来解决它,但您仍然希望修改单元格:
CanUserAddRows="False"
【讨论】:
同意,除非它真的是只读的,否则这似乎过分了。 谢谢,这个答案比 IsReadOnly 对我的帮助要大得多,在我的情况下它有一些我不想要的副作用。 我们可以将此标记为答案,因为 IsReadOnly 确实有副作用,而这没有?【参考方案2】:我知道了
在 Datagrid XAML 上,放置属性:
IsReadOnly="True"
【讨论】:
【参考方案3】:CanUserAddRows="False"
和 IsReadOnly="True"
两者的组合更好地确保任何额外的不便。
【讨论】:
你是在建议他使用两个重叠的功能,其中任何一个都足够了,实际上IsReadOnly = true
将删除其他功能而没有任何收获。以上是关于绑定到 ObservableCollection<T> 时如何删除 DataGrid 的空白行?的主要内容,如果未能解决你的问题,请参考以下文章
MVVM 绑定 ObservableCollection 到 Listview 不工作
将 ObservableCollection 绑定到 WPF 列表框
WPF ComboBox 绑定到 ObservableCollection