/// <summary> /// Creates an <see cref="ObservableValue{T}"/> available via data binding from any page, /// affected by a source observable. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="name"></param> /// <param name="inputObservableSelector"></param> /// <param name="initialValue"></param> /// <returns></returns> public static ObservableValue <T> CreateGlobalProperty <T>(string name, Func <IObservable <T> > inputObservableSelector, T initialValue = default(T)) { var observableValue = new ObservableValue <T>(initialValue); BaseViewModel.AddGlobalProperty <T>(name, observableValue); observableValue.AddInput(inputObservableSelector()); return(observableValue); }
/// <summary> /// Creates an <see cref="ObservableValue{T}"/> available via data binding, affected by a source observable, with late materialization /// of the observable logic. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="viewModel"></param> /// <param name="name"></param> /// <param name="inputObservableSelector"></param> /// <param name="initialValue"></param> /// <returns></returns> public static ObservableValue <T> CreateProperty <T>( this BaseViewModel viewModel, string name, Func <IObservable <T>, IObservable <T> > inputObservableSelector, T initialValue = default(T)) { var observableValue = new ObservableValue <T>(initialValue); viewModel.AddProperty <T>(name, observableValue); viewModel.AddTrigger(ViewModelState.Loaded, () => observableValue.AddInput(inputObservableSelector)); return(observableValue); }