安装
安装 NuGet 包
1 | ReactiveUI.WinForms |
目前最新版是19.4.1
。框架要求 .NET Framework 版本在4.6.2
及以上。
视图模型(ViewModel)
ViewModel
应该从 ReactiveObject 继承,它实现了 INotifyPropertyChanged。
1 | public class FormViewModel : ReactiveObject {} |
定义属性
定义可通知的属性
1 | public class FormViewModel : ReactiveObject |
RaiseAndSetIfChanged 方法会尝试修改字段,如果修改成功则会发出变化的通知。
当有很多属性时,会存在很多相似的geter/seter
代码,很不美观。
此时可以考虑引入ReactiveUI.Fody
包,然后用[Reactive]
注解可以节省很多代码。
1 | public class FormViewModel : ReactiveObject |
视图(View)
View
应该从 IViewFor<T> 继承,这是个泛型接口,T
就是具体的ViewModel
类。
1 | using MyApp.ViewModel; |
WhenActivated 是什么
WhenActivated 方法用于在视图被激活时执行特定的代码。基本上就是执行初始化的地方。
1 | public partial class Form1 : Form, IViewFor<FormViewModel> |
数据绑定
1 | private void OnWhenActivated(CompositeDisposable d) |
这是最基础也最常见的用法。更多用法可以查看官方文档:https://www.reactiveui.net/docs/handbook/data-binding/
WhenAny
ReactiveUI 提供了一系列以 “WhenAny” 开头的方法,用于创建观察属性之间的关系和绑定。这些方法允许你监视属性的变化,并在这些属性变化时执行特定的操作。以下是一些常用的 “WhenAny” 方法:
WhenAny
:监视一个或多个属性的变化,并生成一个IObservable
,以便在这些属性中的任何一个发生变化时发出通知。1
2this.WhenAnyValue(x => x.FirstName, x => x.LastName)
.Subscribe(names => { /* 当 FirstName 或 LastName 变化时执行操作 */ });WhenAnyValue
:与WhenAny
类似,但专门用于监视属性值的变化。它会发出属性的当前值,并在属性值变化时发出新值。1
2this.WhenAnyValue(x => x.Age)
.Subscribe(age => { /* 当 Age 属性值变化时执行操作 */ });WhenAnyObservable
:监视一个或多个IObservable
,并在其中任何一个发出通知时执行操作。1
2this.WhenAnyObservable(x => x.LoadDataCommand.IsExecuting)
.Subscribe(isExecuting => { /* 当 LoadDataCommand 的执行状态变化时执行操作 */ });WhenAnyDynamic
:与WhenAny
类似,但是允许动态选择属性,通常用于在字符串或 Lambda 表达式中引用属性。1
2this.WhenAnyDynamic(x => x.GetPropertyByName(DynamicPropertyName))
.Subscribe(value => { /* 当指定属性变化时执行操作 */ });
这些方法使你能够轻松地创建响应式的属性监视和绑定,以便在属性变化时执行相关操作。
参考资料
https://www.reactiveui.net/docs/handbook/view-models/
https://www.reactiveui.net/docs/handbook/when-any/
https://www.reactiveui.net/docs/handbook/commands/
https://www.cnblogs.com/aijiao/p/17328272.html