【问题标题】:in wpf datagrid how to get the blank row on top?在 wpf datagrid 中如何获得顶部的空白行?
【发布时间】:2011-01-19 20:15:44
【问题描述】:

在 wpf datagrid 中如何获得顶部的空白行?即当用户想要添加新行时,它总是在底部。但我希望它处于领先地位......我可以在 XAML 中做到这一点吗?

【问题讨论】:

    标签: wpf datagrid


    【解决方案1】:

    NewItemPlaceholderPosition.AtBeginning 呢?我没有代码示例,但这似乎就是您所描述的。您始终可以按照 Johan 的建议进行操作,并以编程方式移动或排序网格中的项目。

    Ray Burns 添加的代码示例:

    var view = CollectionView.GetDefaultCollectionView(EmployeeList)
                 as IEditableCollectionView;
    if(view!=null)
      view.NewItemPlaceholderPosition = NewItemPlaceholderPosition.AtBeginning;
    

    请注意,这需要 NET Framework 3.5 或更高版本。

    【讨论】:

    • 优秀的答案 woodyiii (+1)。我添加了一些代码和关于 NET Framework 版本的注释,以使您的答案更好。
    • .GetDefaultCollectionView 不是 CollectionView 类 (4.0) 上的方法。 CollectionViewSource.GetDefaultView(object) 是一样的吗?
    • @RayBurns 请更新有关 .NET Framework 的代码。该代码不适用于 v4 及更高版本..
    • @Michael 是的,这对我有用:CollectionViewSource.GetDefaultView(object)
    【解决方案2】:

    如果您使用的是 MMVM 方法,您可以像这样以编程方式添加新行:

            var newEmp = new EmployeeViewModel(new EmployeeDto());
            EmployeeList.Add(newEmp);
            EmployeeList.Move(EmployeeList.IndexOf(newEmp), 0);
    

    在我的示例中,我使用 EmployeeListViewModel 来显示 EmployeeViewModels 的 ObservableCollection。

    然后您还可以为此行为编写测试。 比 XAML 更多的控制......

    /约翰

    【讨论】:

      【解决方案3】:

      这个答案很大程度上取决于您如何绑定 DataGrid,特别是 ItemsSource 的基础类型是什么。此答案假定您使用的是ObservableCollection。由于您特别提到了 WPF,我还假设您的意思是 .NET 4.0,因为 DataGrid 仅在 Silverlight 3 和 .NET 4.0 中可用。

      我假设你正在通过调用来更新一行

      ItemSource.Add(new MyObject());
      

      要获得您想要的行为,请改用以下内容:

      ItemSource.Insert(0, new MyObject());
      

      【讨论】:

      • 哦不错..这是一种方式..但那是模拟添加行效果...您必须编写事件处理程序并管理所有内容...我可以做到并感谢您的提示。我正在使用 .net 3.5 数据网格 .. 我认为它的测试版和我完全按照您提到的方式进行操作....还有其他想法吗?
      • 如果您安装了 WPF 工具包,DataGrid 可用于 .NET 3.5,该工具包可在 codeplex 上获得。
      【解决方案4】:

      您必须为 DataGrid 编写自己的模板,将 NewItemPlaceholder 部分放置在网格顶部。看看这个example 开始(虽然这个例子不是答案,它会为你指明正确的方向)。

      在旁注中,我想问一下为什么需要在顶部放置 NewItemPlaceholder?它打破了我们在处理列表/网格时习惯于看到的自然自上而下的流程。
      将新项目放在底部并在网格的上下文菜单中插入项目选项或类似这些线的东西可能更直观。当然,这只是我的看法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-03
        • 2010-11-30
        • 2020-12-13
        • 2010-12-19
        • 2014-05-08
        • 1970-01-01
        • 1970-01-01
        • 2013-08-15
        相关资源
        最近更新 更多