/// <summary> /// Creates an <see cref="ObservableValue{TValue}"/> available as a property via data binding, /// and affected by two commands also available via data binding. /// </summary> /// <typeparam name="TValue"></typeparam> /// <param name="viewModel"></param> /// <param name="propertyName"></param> /// <param name="command1Name"></param> /// <param name="command2Name"></param> /// <param name="inputObservableSelector"></param> /// <param name="initialValue"></param> /// <returns></returns> public static ObservableValue <TValue> CreateActiveProperty <TValue>( this BaseViewModel viewModel, string propertyName, string command1Name, string command2Name, Func <IObservable <Unit>, IObservable <Unit>, IObservable <TValue> > inputObservableSelector, TValue initialValue = default) { var command1 = viewModel.CreateObservableCommand(command1Name); var command2 = viewModel.CreateObservableCommand(command2Name); return(viewModel.CreateProperty <TValue>( propertyName, () => inputObservableSelector(command1, command2), initialValue)); }
/// <summary> /// Creates an <see cref="ObservableValue{TValue}"/> available as a property via data binding, /// and affected by four commands respectively accepting <typeparamref name="TParam1"/>, /// <typeparamref name="TParam2"/>, <typeparamref name="TParam3"/> and /// <typeparamref name="TParam4"/> parameters also available via data binding. /// </summary> /// <typeparam name="TValue"></typeparam> /// <typeparam name="TParam1"></typeparam> /// <typeparam name="TParam2"></typeparam> /// <typeparam name="TParam3"></typeparam> /// <typeparam name="TParam4"></typeparam> /// <param name="viewModel"></param> /// <param name="propertyName"></param> /// <param name="command1Name"></param> /// <param name="command2Name"></param> /// <param name="command3Name"></param> /// <param name="command4Name"></param> /// <param name="inputObservableSelector"></param> /// <param name="initialValue"></param> /// <returns></returns> public static ObservableValue <TValue> CreateActiveProperty <TValue, TParam1, TParam2, TParam3, TParam4>( this BaseViewModel viewModel, string propertyName, string command1Name, string command2Name, string command3Name, string command4Name, Func <IObservable <TParam1>, IObservable <TParam2>, IObservable <TParam3>, IObservable <TParam4>, IObservable <TValue> > inputObservableSelector, TValue initialValue = default) { var command1 = viewModel.CreateObservableCommand <TParam1>(command1Name); var command2 = viewModel.CreateObservableCommand <TParam2>(command2Name); var command3 = viewModel.CreateObservableCommand <TParam3>(command3Name); var command4 = viewModel.CreateObservableCommand <TParam4>(command4Name); return(viewModel.CreateProperty( propertyName, () => inputObservableSelector(command1, command2, command3, command4), initialValue)); }
/// <summary> /// Creates an <see cref="ObservableValue{TValue}"/> available as a property via data binding, /// and affected by a command accepting a <typeparamref name="TParam"/> parameter also /// available via data binding, with an observable that determines if execution permission must /// be re-evaluated from a can execute function. /// </summary> /// <typeparam name="TValue"></typeparam> /// <typeparam name="TParam"></typeparam> /// <param name="viewModel"></param> /// <param name="propertyName"></param> /// <param name="command1Name"></param> /// <param name="inputObservableSelector"></param> /// <param name="initialValue"></param> /// <returns></returns> public static ObservableValue <TValue> CreateActiveProperty <TValue, TParam>( this BaseViewModel viewModel, string propertyName, string command1Name, Func <IObservable <TParam>, IObservable <TValue> > inputObservableSelector, Func <TParam, bool> canExecuteFunc, IObservable <Unit> canExecuteChangedObservable, TValue initialValue = default) { var command1 = viewModel.CreateObservableCommand <TParam>(command1Name, canExecuteFunc, canExecuteChangedObservable); return(viewModel.CreateProperty <TValue>( propertyName, () => inputObservableSelector(command1), initialValue)); }
/// <summary> /// Creates an <see cref="ObservableValue{TValue}"/> available as a property via data binding, /// and affected by a command accepting a <typeparamref name="TParam"/> parameter also /// available via data binding, with an observable that determines if it can be executed. You /// can optionally expose that observable via a "Can" + commandName property. /// </summary> /// <typeparam name="TValue"></typeparam> /// <typeparam name="TParam"></typeparam> /// <param name="viewModel"></param> /// <param name="propertyName"></param> /// <param name="commandName"></param> /// <param name="inputObservableSelector"></param> /// <param name="canExecuteObservable"></param> /// <param name="initialValue"></param> /// <param name="includeCanProperty"></param> /// <returns></returns> public static ObservableValue <TValue> CreateActiveProperty <TValue, TParam>( this BaseViewModel viewModel, string propertyName, string commandName, Func <IObservable <TParam>, IObservable <TValue> > inputObservableSelector, IObservable <bool> canExecuteObservable, TValue initialValue = default, bool includeCanProperty = false) { var command = viewModel.CreateObservableCommand <TParam>(commandName, canExecuteObservable, includeCanProperty); return(viewModel.CreateProperty <TValue>( propertyName, () => inputObservableSelector(command), initialValue)); }
/// <summary> /// Creates an <see cref="IObservableCommand{Unit}"/>, which ignores any parameter, available via data binding. /// </summary> /// <param name="viewModel"></param> /// <param name="name"></param> /// <returns></returns> public static IObservableCommand <Unit> CreateObservableCommand(this BaseViewModel viewModel, string name) { return(viewModel.CreateObservableCommand <Unit>(name)); }