将View及其关联的ViewModel协同工作的最低要求是什么?
当View由子视图组成时(与基于1x1或1xN基数的父级相关),ReactiveUI如何处理?就像一个带有2个子视图的视图,每个子视图都有一个ViewModel列表.
根据文件:
使用View Location的最简单方法是通过ViewModelViewHost控件,它是一个View(在Cocoa上,一个UIView/NSView,在基于XAML的平台上一个Control),它有一个ViewModel属性.设置ViewModel属性后,View Location将查找关联的View并将其加载到容器中.
这就是我通常做的事情.您的所有Viewmodel/SubViewmodel等都只有一个相应的View实现IViewFor
要使用View Location,您必须先通过Splat的服务位置功能注册类型.
Locator.CurrentMutable.Register(() => new ToasterView(), typeof(IViewFor
因此,基本上每当View在其上承载一个/多个ViewModelViewHost控件时,一旦您将viewmodel设置或绑定到它,它就会查找并加载已注册的视图. ViewModelViewHost托管View的容器控件.
视图知道ViewModel,但ViewModel不知道视图.
就层次结构而言,ViewModelViewHost将基于ViewModel绑定到它的任何内容进行更新,并且它们将一直向下乌龟.通常我的顶级视图几乎都是一堆ViewModelViewHost控件,它们只是从那里向下钻取.使用ReactiveUI的.WhenAny() 方法,您可以轻松地在ViewModels/SubViewModels等层次结构中上下查看属性,而无需担心重新订阅或空检查.