Я пытаюсь сделать что-то довольно простое, и получать разочарованы .Net:Перекрытие ObservableCollection <T> - Легкий способ
Я просто хочу, чтобы иметь DataGrid WPF, который автоматически добавляет пустую строку в конце, аналогично для ввода данных в таблицу в MS Access или SQL Management Studio.
Моей идеей было переопределить ObservableCollection: сохранить член newItem, который я динамически добавляю при чтении коллекции Items. Что-то вроде этого:
// Warning this code doesn't work
public class MyCollection<T> : ObservableCollection<T>
{
private T _newItem;
// there would be a constructor which would initialize _newItem
protected override IList<T> Items
{
get
{
List<T> newItems = new List<T>();
newItems.Add(_newItem);
return base.Items.Union(newItems).ToList();
}
}
}
Есть несколько проблем с моим кодом. Во-первых, вы не можете переопределить getter свойства Items. Это не сложно.
Во-вторых, даже если бы вы могли, этот геттер даже не вызывается, когда DataGrid привязан к коллекции. Я думаю, что метод GetEnumerator должен быть переопределен здесь, но, конечно, это тоже не переопределяемо.
Что является самым простым способом расширить класс ObservableCollection для реализации этой функции. На данный момент это похоже на то, что я должен сам реализовать все это, а не наследовать от ObservableCollection. По очевидным причинам я устойчив к этой идее.
Заранее благодарен!
Возможно, пойдите со стороны DataGrid. – Paparazzi
Для этого DataGrid имеет [встроенную функцию] (http://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.canuseraddrows.aspx). –
Если вы используете mvvm, ваша модель просмотра всегда может добавлять пустой элемент в коллекцию, когда захотите. не нужно ничего переоценивать – blindmeis