INPC enable binding V <-> VM and need ICommand to execute request to Server side. It is interesting to see if Observables in Rx running on a TaskPoolScheduler can do the same as Delagete or Relay Command. Both FromEventPattern and CLR event should work public class ViewModel : INotifyPropertyChanged { public string Cusip { get; set; } public double Ask { get;set; } public event PropertyChangedEventHandler PropertyChanged; public IObservable<Tuple<T, string>> OnSubmitChanges<T>(Expression<Func<ViewModel, T>> exp) { MemberExpression me = exp.Body as MemberExpression; string n = me.Member.Name; Func<ViewModel, T> f = exp.Compile(); T i = f.Invoke(this); return Observable.Return(new Tuple<T,string>(i,n)); } public ViewModel() { PropertyChanged += ViewModel_PropertyChanged; // Observable.FromEventPattern<PropertyChangedEventHandler, PropertyChangedEventArgs>(hh => hh.Invoke, h => this.PropertyChanged += h, h => this.PropertyChanged -= h) .Subscribe((e) => { ViewModel_PropertyChanged(this, e.EventArgs); }); } private void ViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e) { // From Event Pattern does not need subscribe again. Direct call Server side is enougth. if (e.PropertyName == "Cusip") OnSubmitChanges(vm => vm.Cusip).Subscribe((i) => { Console.WriteLine("Call IVMController->IModObsAdapter->IModObsTransport->QueueAsObserver " + i); }); //459200-10-1 //912828NB2 if (e.PropertyName == "Ask") OnSubmitChanges(vm => vm.Ask).Subscribe((i) => { Console.WriteLine("Hit bid lift offer " + i); }); } } private static void TestConvertPropChangeToObservable() { ViewModel v = new ViewModel(); v.Cusip = "912828NB2"; v.OnSubmitChanges(vm => vm.Cusip).Subscribe((i) => { Console.WriteLine("Call IVMController->IModObsAdapter->IModObsTransport->QueueAsObserver " + i); }); //459200-10-1 //912828NB2 v.Ask = 98.23; v.OnSubmitChanges(vm => vm.Ask).Subscribe((i) => { Console.WriteLine("Hit bid lift offer " + i); }); }
Saturday, June 28, 2014
Convert Property Change to Observable
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment