在wpf datagrid中如何获取空白行?即当用户想要添加新行时,它总是位于底部。但我希望它能在最前面......我可以在XAML中做到这一点吗?
答案 0 :(得分:8)
NewItemPlaceholderPosition.AtBeginning怎么样?我没有代码示例,但这似乎是您所描述的。您可以随时按照建议进行操作,并以编程方式对网格中的项目进行移动或排序。
Ray Burns添加的代码示例:
var view = CollectionView.GetDefaultCollectionView(EmployeeList)
as IEditableCollectionView;
if(view!=null)
view.NewItemPlaceholderPosition = NewItemPlaceholderPosition.AtBeginning;
请注意,这需要.NET Framework 3.5或更高版本。
答案 1 :(得分:1)
如果您正在使用MMVM方法,则可以以编程方式添加新行:
var newEmp = new EmployeeViewModel(new EmployeeDto());
EmployeeList.Add(newEmp);
EmployeeList.Move(EmployeeList.IndexOf(newEmp), 0);
在我的示例中,我使用EmployeeListViewModel来显示EmployeeViewModel的ObservableCollection。
然后您还可以为此行为编写测试。 比XAML更多的控制....
/约翰
答案 2 :(得分:0)
这个答案很大程度上取决于你如何绑定你的DataGrid,特别是你的ItemsSource的底层类型是什么。此答案假设您使用的是ObservableCollection。由于您特别提到WPF,我还假设您的意思是.NET 4.0,因为DataGrid仅在Silverlight 3和.NET 4.0中可用。
我假设您正在通过调用
来新增一行ItemSource.Add(new MyObject());
要获得所需的行为,请改用以下内容:
ItemSource.Insert(0, new MyObject());
答案 3 :(得分:0)
您必须为DataGrid编写自己的模板,您可以将NewItemPlaceholder部件放在网格顶部。请看这个example开头(虽然示例不是答案,它会指向正确的方向)。
在旁注中,我可以问为什么你需要在顶部使用NewItemPlaceholder?它打破了我们在处理列表/网格时常常看到的自然上下流动 在底部使用New Item和在网格的上下文菜单中插入项目选项或沿着这些行的某些内容可能更直观。那当然只是我的意见。