Wpf 当任何值不';我不工作
我正在使用WPF和ReactiveUI实现一个典型的master details GUI模式。我想保持主视图模型和细节视图模型彼此分离,而不诉诸于更脆弱和间接的东西,如消息总线。然而,有些东西不起作用 我有两个问题:Wpf 当任何值不';我不工作,wpf,mvvm,system.reactive,master-detail,reactiveui,Wpf,Mvvm,System.reactive,Master Detail,Reactiveui,我正在使用WPF和ReactiveUI实现一个典型的master details GUI模式。我想保持主视图模型和细节视图模型彼此分离,而不诉诸于更脆弱和间接的东西,如消息总线。然而,有些东西不起作用 我有两个问题: 为什么WhenAnyValue在下面的“我的代码”中不起作用 问题是什么 在中实现解耦主细节的推荐方法 现在有反应吗 代码: 公共类ShellViewModel:ReactiveObject { 公共ShellViewModel(OrderListViewModel OrderLi
WhenAnyValue
在下面的“我的代码”中不起作用公共类ShellViewModel:ReactiveObject
{
公共ShellViewModel(OrderListViewModel OrderListViewModel、OrderDetailsViewModel OrderDetailsViewModel)
{
OrderListViewModel=OrderListViewModel;
OrderDetailsViewModel=OrderDetailsViewModel;
此.whenyValue(x=>x.OrderListViewModel.SelectedOrderHeader.Do(h=>
{
OrderDetailsViewModel.Set(h);
});
}
public OrderListViewModel OrderListViewModel{get;}
public OrderDetailsViewModel OrderDetailsViewModel{get;}
}
我省略了两个基本的视图模型和相关视图,因为它们非常典型(可观察列表+选定项属性),而且它们本身似乎工作得很好
更新:可以通过使用订阅
而不是执行
来“修复”1。我不知道后者的目的是什么
为什么WhenyValue在下面的代码中不起作用
因为Rx观测值(比如当任何值时从返回的观测值)本质上是惰性的。这意味着,除非您对它们调用Subscribe
,否则不会发生任何事情。正如你所说的
#1可以通过使用Subscribe而不是Do来“修复”。我不知道后者的目的是什么
它的目的是为你的Rx流引入副作用。例如,您可以向该方法中注入一些日志记录
this.WhenAnyValue(x => x.OrderListViewModel.SelectedOrderHeader)
.Do(_ => Console.WriteLine("Order selected!")
.Subscribe(h => OrderDetailsViewModel = h);
请注意
现在,在ReactiveUI中实现解耦主细节的推荐方法是什么
我觉得你的代码很好。我想到的另一种方法是直接从OrderListViewModel
中公开IObservable
哦,除此之外,你还应该考虑在你的<代码> SeLView模型类中喂养这些视图模型。在OrderListViewModel.SelectedOrderHeader?@tagaPdyk谢谢,但这不是问题所在,我已经用我的最新发现更新了问题。感谢您的全面回答!