ReadOnlyObservableProxyCollection - Houzkin/TreeStructures GitHub Wiki
//
public class ReadOnlyObservalbeProxyCollection<T, U> : ReadOnlyObservableCollection<U>, IDisposable{
//constructor
public ReadOnlyObservableProxyCollection(
IEnumerable<T> source,
Func<T,U> convert,
Func<T,U,bool> equality,
Action<U>? removedHandler = null)
: base(new ObservableCollection<U>()) { }
protected new ObservableCollection<U> Items { get; }
protected virtual IEnumerable<T> SourceItems { get; }
protected virtual void ApplyCollectionChange(NotifyCollectionChangedEventArgs e);
protected virtual void Dispose(bool disposing);
public void Dispose();
}
public class ReadOnlyObservableProxyCollection<T> : ReadOnlyObservableProxyCollection<T, T>{
//constructor
public ReadOnlyObservableProxyCollection(
IEnumerable<T> source,
Action<T>? addAction = null,
Action<T>? removedAction = null,
IEqualityComparer<T>? equality = null)
: base(source,
addAction is null ? (x => x) : (x => { addAction.Invoke(x); return x; }),
(x, y) => equality?.Equals(x, y) ?? Equality<T>.ValueOrReferenceComparer.Equals(x, y),
removedAction) { }
}// // //
public static void MethodLL() {
var srcList = new ObservableCollection<char>("ABCDEFG".ToCharArray());
var obsPxy = new ReadOnlyObservableProxyCollection<char, string>(
srcList,
x =>x.ToString().ToUpper(),
(chr, str) => chr.ToString().ToUpper() == str);
Console.WriteLine(string.Join(",", obsPxy));
//A,B,C,D,E,F,G
srcList.Add('X');
srcList.Remove('B');
Console.WriteLine(string.Join(",", obsPxy));
//A, C, D, E, F, G, X
}