使用System.Reactive观察ObservableCollection中的项目的PropertyChanged
我有:
public class Vm { private ObservableCollection _things; public ObservableCollection Things { get { return _things ?? (_things = new ObservableCollection()); } } }
和
public class Thing :INotifyPropertyChanged { private string _value; public string Value { get { return _value; } set { if (value == _value) return; _value = value; OnPropertyChanged(); } } public event PropertyChangedEventHandler PropertyChanged; [NotifyPropertyChangedInvocator] protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChangedEventHandler handler = PropertyChanged; if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); } }
我想观察ObservableCollection中所有项目的PropertyChanges
rx是否适合这个?
观察者如何在这种情况下接线? (我可以发布一些你尝试过的东西,但我认为它不会增加太多)
Rx是一个完美的契合,我不会称之为重新发明轮子!
考虑这个简单的扩展方法,用于将属性更改事件转换为可观察流:
public static class NotifyPropertyChangedExtensions { public static IObservable WhenPropertyChanged(this NotifyPropertyChanged notifyPropertyChanged) { return Observable.FromEvent( ev => notifyPropertyChanged.PropertyChanged += ev, ev => notifyPropertyChanged.PropertyChanged -= ev); } }
在您的视图模型中,您只需合并所有单个可观察的属性更改流:
上述就是C#学习教程:使用System.Reactive观察ObservableCollection中的项目的PropertyChanged分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
public class VM { readonly SerialDisposable subscription; public VM() { subscription = new SerialDisposable(); Things = new ObservableCollection(); Things.CollectionChanged += ThingsCollectionChanged; } void ThingsCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { subscription.Disposable = Things.Select(t => t.WhenPropertyChanged()) .Merge() .Subscribe(OnThingPropertyChanged); } void OnThingPropertyChanged(PropertyChangedEventArgs obj) { //ToDo! } public ObservableCollection Things { get; private set; } }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/953422.html