private static DispatchItem CreateFromAdapterView() { // AdapterView is more complicated because there are two events - one for select and one for deselect // respond to both const string propName = "SelectedItem"; return(new DispatchItem { Type = typeof(AdapterView), Property = propName, Func = (x, ex) => { var adapterView = (AdapterView)x; var itemSelected = Observable.FromEvent <EventHandler <AdapterView.ItemSelectedEventArgs>, ObservedChange <object, object> >( eventHandler => { void Handler(object sender, AdapterView.ItemSelectedEventArgs e) => eventHandler(new ObservedChange <object, object>(adapterView, ex)); return Handler; }, h => adapterView.ItemSelected += h, h => adapterView.ItemSelected -= h); var nothingSelected = Observable.FromEvent <EventHandler <AdapterView.NothingSelectedEventArgs>, ObservedChange <object, object> >( eventHandler => { void Handler(object sender, AdapterView.NothingSelectedEventArgs e) => eventHandler(new ObservedChange <object, object>(adapterView, ex)); return Handler; }, h => adapterView.NothingSelected += h, h => adapterView.NothingSelected -= h); return Observable.Merge(itemSelected, nothingSelected); } });
private static DispatchTuple CreateFromAdapterView() { // AdapterView is more complicated because there are two events - one for select and one for deselect // respond to both const string propName = "SelectedItem"; return(new DispatchTuple { Type = typeof(AdapterView), Property = propName, Func = (x, ex) => { var v = (AdapterView)x; return Observable.Merge( Observable.FromEventPattern <AdapterView.ItemSelectedEventArgs>(h => v.ItemSelected += h, h => v.ItemSelected -= h) .Select(_ => new ObservedChange <object, object>(v, ex)), Observable.FromEventPattern <AdapterView.NothingSelectedEventArgs>(h => v.NothingSelected += h, h => v.NothingSelected -= h) .Select(_ => new ObservedChange <object, object>(v, ex))); } }); }