wabbajack/Wabbajack.App/Extensions/IObservableExtensions.cs

43 lines
1.4 KiB
C#
Raw Normal View History

2021-09-27 12:42:46 +00:00
using System;
2021-11-02 13:40:59 +00:00
using System.Linq.Expressions;
2021-09-27 12:42:46 +00:00
using System.Reactive.Disposables;
2021-11-02 13:40:59 +00:00
using System.Reactive.Linq;
2021-09-27 12:42:46 +00:00
using System.Reactive.Subjects;
using System.Threading.Tasks;
2021-11-02 13:40:59 +00:00
using Microsoft.CodeAnalysis.CSharp.Syntax;
using ReactiveUI;
2021-09-27 12:42:46 +00:00
2021-10-23 16:51:17 +00:00
namespace Wabbajack.App.Extensions;
public static class IObservableExtensions
2021-09-27 12:42:46 +00:00
{
2021-11-02 13:40:59 +00:00
public static IDisposable SimpleOneWayBind<TView, TViewModel, TProp, TOut>(
this TView view,
TViewModel? viewModel,
Expression<Func<TViewModel, TProp?>> vmProperty,
Expression<Func<TView, TOut?>> viewProperty)
where TView : class
{
var d = viewModel.WhenAny(vmProperty, change => change.Value)
.ObserveOn(RxApp.MainThreadScheduler)
.BindTo(view, viewProperty);
return Disposable.Create(() => d.Dispose());
}
public static IDisposable SimpleOneWayBind<TView, TViewModel, TProp, TOut>(
this TView view,
TViewModel? viewModel,
Expression<Func<TViewModel, TProp?>> vmProperty,
Expression<Func<TView, TOut?>> viewProperty,
Func<TProp?, TOut> selector)
where TView : class
{
var d = viewModel.WhenAnyValue(vmProperty)
.Select(change => selector(change))
.ObserveOn(RxApp.MainThreadScheduler)
.BindTo(view, viewProperty);
return Disposable.Create(() => d.Dispose());
}
2021-09-27 12:42:46 +00:00
}