【问题标题】:WPF: How to always have a new row available in a datagrid?WPF:如何始终在数据网格中提供新行?
【发布时间】:2025-12-03 22:25:01
【问题描述】:

我目前正在使用带有 ViewModel 的 WPF/Xaml 数据网格,但在底部保留一个新的空行时遇到问题。我可以制表符或输入我的方式,数据网格会创建一个新行,但用户希望始终有新行可以点击。是否有捷径可寻?我尝试了几种方法,但都失败了。

如果有帮助的话,我有 CanUserAddRows = true 和 AutoGenerateColums = false。

【问题讨论】:

  • 您希望何时添加新行?
  • 一旦当前/最后一行变脏。

标签: c# wpf xaml datagrid


【解决方案1】:

在您的 ObservableCollection 中插入一个新项目。

【讨论】:

  • 我喜欢这个主意,但是当当前的新行变脏时我无法捕捉到。
  • @Austin:那么请看我的回答。
【解决方案2】:

您可以将DataGridCanUserAddRows 属性设置为false,并自行处理添加“新”空白行。每当您想要一个新行时,您应该将一个没有设置任何属性的“空白”对象添加到您的 ObservableCollection<T> 源集合中。

要弄清楚的困难部分可能是 when 添加行。例如,当用户设置源集合中最后一项的属性时,您可以这样做。

如果T类型实现了INotifyPropertyChanged接口,你可以订阅每个添加到源集合的项目的PropertyChanged事件,并在事件处理程序中检查是否添加新项目,例如:

private void OnItemPropertyChanged(object sender, PropertyChangedEventArgs e)
{
    var dirtyItem = sender as T;
    if (dirtyItem != null && sourceCollection.LastOrDefault() == dirtyItem)
    {
        T newRow = new T();
        newRow.PropertyChanged += OnItemPropertyChanged;
        sourceCollection.Add(t);
    }
}

【讨论】: