要做到這一點,最簡單的方法是創建一個實現INotifyCollectionChanged一個子類,也有排序功能。如果您已經在使用SortedList,那麼您可以簡單地創建一個從SortedList派生的類,實現INotifyCollectionChanged並重寫Add/Remove /等。方法來引發NotifyCollectedChanged事件。
它可能看起來像這樣(不完全):
public class SortedObservableList : SortedList, INotifyCollectionChanged
{
public override void Add(object key, object value)
{
base.Add(key, value);
RaiseCollectionChanged(NotifyCollectionChangedAction.Add);
}
public override void Remove(object key)
{
base.Remove(key);
RaiseCollectionChanged(NotifyCollectionChangedAction.Remove);
}
#region INotifyCollectionChanged Members
protected void RaiseCollectionChanged(NotifyCollectionChangedAction action)
{
if (CollectionChanged != null)
CollectionChanged(this, new NotifyCollectionChangedEventArgs(action));
}
public event NotifyCollectionChangedEventHandler CollectionChanged;
#endregion
}
或者,您可以創建一個從的ObservableCollection並實現排序功能派生的類,但如果你已經使用了,可能沒有意義排序列表。
編輯:下面您的意見和問題的進一步檢查表明您正在使用的排序列表(排序列表)的通用版本。在這種情況下,您可以讓SortableObservableList實現IDictionary接口(和/或ICollection,IEnumerable),並在內部使用SortedList存儲這些項目。這裏是你可以使用代碼的片段(不包括所有的實施方法,因爲它們只是道直通到您的內部排序列表。)
public class SortedObservableList<TKey, TValue> : IDictionary<TKey, TValue>, INotifyCollectionChanged
{
private SortedList<TKey, TValue> _list;
public SortedObservableList()
{
_list = new SortedList<TKey, TValue>();
}
#region INotifyCollectionChanged Members
protected void RaiseCollectionChanged(NotifyCollectionChangedAction action)
{
if (CollectionChanged != null)
CollectionChanged(this, new NotifyCollectionChangedEventArgs(action));
}
public event NotifyCollectionChangedEventHandler CollectionChanged;
#endregion
#region IDictionary<TKey,TValue> Members
public void Add(TKey key, TValue value)
{
_list.Add(key, value);
this.RaiseCollectionChanged(NotifyCollectionChangedAction.Add);
}
public bool ContainsKey(TKey key)
{
return _list.ContainsKey(key);
}
public ICollection<TKey> Keys
{
get { return _list.Keys; }
}
public bool Remove(TKey key)
{
bool result = _list.Remove(key);
this.RaiseCollectionChanged(NotifyCollectionChangedAction.Remove);
return result;
}
//etc...
#endregion
}
布賴恩您好,感謝您的建議。我不確定這種方法會給我綁定_mySortedList.Values。至少在初始數據綁定後發生數據時,它似乎不起作用。 – user630190
我已編輯答案,以包含使用通用SortedList時可以工作的方法。希望這會爲你工作。 –