【问题标题】:DataGrid relocate add new row to the topDataGrid 重新定位将新行添加到顶部
【发布时间】:2013-11-08 05:06:32
【问题描述】:

在 DataGrid 视图中,空白行添加条目很方便,但当列表很大时很快就会丢失。您可以将其默认位置从 DataGrid 视图的底部更改为顶部吗?

【问题讨论】:

    标签: wpf datagrid


    【解决方案1】:

    我很少使用 DataGrid 并且对它添加行的能力一无所知,但是从 WPF/MVVM 的角度来看,无论如何您都不需要它。一般在 WPF/MVVM 中,我们操作的是数据而不是 UI 控件,所以解决起来很简单。首先,我们将Bind 我们的数据集合(以我们选择的任何形状)发送到DataGrid.ItemsSource 属性:

    public ObservableCollection<DataItem> SomeDataCollection { get; set; }
    
    ...
    
    <DataGrid ItemsSource="{Binding SomeDataCollection}" ... />
    

    现在,如果我们想在DataGrid 的底部添加一个新项目,我们可以在代码后面/视图模型中执行此操作:

    SomeDataCollection.Add(new DataItem());
    

    如果我们想在集合的开头添加一个新项目,我们可以这样做:

    SomeDataCollection.Insert(0, new DataItem());
    

    当然,您需要在代码背后/视图模型中实现INotifyPropertyChanged 接口才能使这项工作正常进行,但是(希望)您无论如何都会这样做。


    更新>>>

    对不起,我误会你了。我在 MSDN 上找到了一个 NewItemPlaceholderPosition Enumeration,它被 ItemCollection.IEditableCollectionView.NewItemPlaceholderPosition Property 使用。不幸的是,这些链接页面没有代码示例,所以我在 StackOverflow 上的 in wpf datagrid how to get the blank row on top? 帖子中找到了一个。来自@woodyiii 在该帖子中的回答:

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

    这确实意味着您必须使用 CollectionView 才能使其正常工作,但这似乎是唯一的方法......除了各种 @987654337 之外,其他任何东西都不会使用 NewItemPlaceholderPosition 枚举@类。

    【讨论】:

    • 对不起,我不够具体。在 DataGrid xaml 中,您可以设置 CanUserAddRow=true。一旦感知,DataGrid UI 就会启用空白行,以便用户可以轻松地输入新内容。此空白行默认位于底部。我想把它定位到顶部。
    • 这正是我所需要的!谢谢!
    猜你喜欢
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    相关资源
    最近更新 更多