绑定到 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

将 ObservableCollection 绑定到 WPF 列表框

WPF ComboBox 绑定到 ObservableCollection

如何将 ObservableCollection 绑定到 DataTemplate 中的文本框?

如何将 WPF DataGrid 绑定到 ObservableCollection