我在一個WPF應用程序中有一個DataGrid
,它的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-使用的-A-工廠換數據網格-canuseraddrows真/ 9863828#9863828。你可以用BindingList來做你所需要的。 –
Phil
2012-03-31 00:20:14
謝謝!聽起來不錯 – 2012-04-03 00:31:42