У меня есть DataGrid
в приложении WPF, которое имеет для своей ItemsSource
пользовательскую коллекцию, которую я написал. Коллекция обеспечивает, чтобы все ее элементы удовлетворяли определенному требованию (а именно, они должны быть между минимальными и максимальными значениями).Каков наилучший способ заставить WPF DataGrid добавить определенный новый элемент?
класс Подпись коллекции является:
public class CheckedObservableCollection<T> : IList<T>, ICollection<T>, IList, ICollection,
INotifyCollectionChanged
where T : IComparable<T>, IEditableObject, ICloneable, INotifyPropertyChanged
Я хочу, чтобы иметь возможность использовать DataGrid
функцию, в которой совершает редактирование на последней строке в DataGrid
результатов в новой позиции, добавляемое к концу ItemsSource
.
К сожалению, DataGrid
просто добавляет новый элемент, созданный с использованием конструктора по умолчанию. Таким образом, при добавлении нового элемента, DataGrid
косвенно (через его ItemCollection
, который запечатанный класс) заявляет:
ItemsSource.Add(new T())
где T является типом элементов в CheckedObservableCollection. Я хотел бы, чтобы сетка вместо этого добавила другую T, которая удовлетворяет ограничениям, налагаемым на коллекцию.
Мои вопросы: есть ли встроенный способ сделать это? Кто-то сделал это уже? Что лучше всего (проще всего, быстрее всего выполнить код, производительность - не проблема)?
В настоящее время я только полученный DataGrid
переопределить функцию OnExecutedBeginEdit
с моим собственным следующим образом:
public class CheckedDataGrid<T> : DataGrid where T : IEditableObject, IComparable<T>, INotifyPropertyChanged, ICloneable
{
public CheckedDataGrid() : base() { }
private IEditableCollectionView EditableItems {
get { return (IEditableCollectionView)Items; }
}
protected override void OnExecutedBeginEdit(ExecutedRoutedEventArgs e) {
try {
base.OnExecutedBeginEdit(e);
} catch (ArgumentException) {
var source = ItemsSource as CheckedObservableCollection<T>;
source.Add((T)source.MinValue.Clone());
this.Focus();
}
}
}
Где MinValue
наименьшее допустимое элемент в коллекции.
Мне не нравится это решение. Если у кого-нибудь из вас есть совет, я был бы очень благодарен!
Благодаря
Смотрите мой ответ здесь http://stackoverflow.com/questions/4484256/how- в использовании мини-завод-для-DataGrid-canuseraddrows-истинном/9863828 # 9863828. Вы, вероятно, можете делать то, что вам нужно, используя BindingList. –
Phil
Спасибо! Звучит хорошо для меня –