绑定到ObservableCollection <T>时如何删除DataGrid的空行?

Jun*_*r M 40 datagrid observablecollection wpftoolkit

我在这里坚持这个:

ObservableCollection<Employee> list = new ObservableCollection<Employee>();
dgEmployees.ItemsSource = list;
Run Code Online (Sandbox Code Playgroud)

当您调试列表变量时,它是空的(list.Count = 0),但是然后我将它绑定到DataGrid(WPFToolkit),它向我显示一个空行.

在即时窗口中,对于dgEmployees.Items,它显示:

dgEmployees.Items[0]
{NewItemPlaceholder}
Run Code Online (Sandbox Code Playgroud)

dgEmployees.Items[0].GetType()
{Name = "NamedObject" FullName = "MS.Internal.NamedObject"}
[System.RuntimeType]: {Name = "NamedObject" FullName = "MS.Internal.NamedObject"}
Run Code Online (Sandbox Code Playgroud)

这似乎发生在我将这个Datagrid放入TabControl后,但我不确定它与它有什么关系.

有谁知道如何删除这个空白行?

小智 85

WPF 4.0版本的DataGrid中仍然存在同样的问题,它是由自动显示的ObservableCollection ItemsSource的add-new行引起的.将IsReadOnly设置为True它太激进恕我直言.
如果您不需要该行为,我通过禁用CanUserAddRows属性解决了这个问题,但您仍然希望修改单元格:

CanUserAddRows = "假"

  • 我们可以将此标记为答案,因为IsReadOnly确实有副作用,而这不是吗? (2认同)

Jun*_*r M 20

我懂了

在Datagrid XAML上,放置属性:

IsReadOnly="True"
Run Code Online (Sandbox Code Playgroud)


Saw*_*kas 5

CanUserAddRows="False"两者的结合IsReadOnly="True"可以更好地避免任何额外的不便。