/// <summary> /// Used for chained subscriptions sample: /// source.ObservePropertyChangedWithValue(x => x.Collection, true) /// .ItemPropertyChanged(x => x.Name) /// </summary> /// <typeparam name="TItem"></typeparam> /// <typeparam name="TProperty"></typeparam> /// <param name="source"></param> /// <param name="property"></param> /// <returns></returns> public static IObservable <EventPattern <ItemPropertyChangedEventArgs <TItem, TProperty> > > ItemPropertyChanged <TItem, TProperty>( this IObservable <EventPattern <PropertyChangedAndValueEventArgs <ReadOnlyObservableCollection <TItem> > > > source, Expression <Func <TItem, TProperty> > property) where TItem : class, INotifyPropertyChanged { var observable = new ItemsObservable <ReadOnlyObservableCollection <TItem>, TItem, TProperty>(source, property); return(observable); }
protected override async void OnDeleteItem(object commandParameter) { ValidationErrors = null; if (SelectedItem != null && SelectedItemIndex.HasValue) { try { await _studentService.Delete(SelectedItem.Student.Id); Students.RemoveAt(SelectedItemIndex.Value); ItemsObservable.Remove(SelectedItem); } catch (ValidationPropertyException vpe) { ValidationErrors = vpe.ErrorsList.ToList(); } catch (ValidationException ve) { ValidationErrors = ve.Errors.ToList(); } } }