C# 当子ViewModel的属性更改时,ReactiveUI通知

C# 当子ViewModel的属性更改时,ReactiveUI通知,c#,reactiveui,avaloniaui,C#,Reactiveui,Avaloniaui,我对ReactiveUI很陌生,所以我不确定我是否遗漏了一些明显的东西 我的主窗口有一个ViewModel,它是空的,只绑定到Content属性 公共类MainWindowViewModel:ViewModelBase { 私有ViewModelBase\u内容; 公共ViewModelBase内容 { 获取=>\u内容; private set=>this.RaiseAndSetIfChanged(参考内容,值); } 公共主窗口视图模型() { HomeViewModel HomeViewM

我对ReactiveUI很陌生,所以我不确定我是否遗漏了一些明显的东西

我的主窗口有一个ViewModel,它是空的,只绑定到
Content
属性

公共类MainWindowViewModel:ViewModelBase { 私有ViewModelBase\u内容; 公共ViewModelBase内容 { 获取=>\u内容; private set=>this.RaiseAndSetIfChanged(参考内容,值); } 公共主窗口视图模型() { HomeViewModel HomeViewModel=新的HomeViewModel(); homeViewModel .WhenyValue(x=>x.CurrentItem) .Select(=>newmainviewmodel()) .ToProperty(这个,x=>x.Content); 内容=homeViewModel; } } 如您所见,构造函数创建了一个
HomeViewModel
,它是
HomeControl
的视图模型。 在这个ViewModel中,我创建了一个命令,该命令应该只设置一个属性

公共类HomeViewModel:ViewModelBase
{
私有ObservablePropertyHelper\u currentItem;
公共反应命令GetItemCommand{get;}
public ItemWrapper CurrentItem=>\u CurrentItem.Value;
公共HomeViewModel()
{
GetItemCommand=ReactiveCommand.CreateFromTask(getItem);
_currentItem=GetItemCommand.TopProperty(这个,x=>x.currentItem);
}
专用异步任务getItem(){…}
}
通常我习惯于在
CurrentItem
的setter中调用
OnPropertyChanged
。但是,文档描述的
ObservablesPropertyHelper
方法应该自动调用。因此,
WhenAnyValue
应在
MainWindowViewModel
内触发,并应创建新的ViewModel


提前谢谢

ViewModelBase是您编写的自定义类,还是您另外使用了另一个MVVM框架?我不完全理解您的代码,但是
.Select(=>newmainviewmodel())
在我看来很奇怪,因为我不认为您的意图是在HomeViewModel的当前项发生更改时创建一个新的主视图模型。@,
ViewModelBase
是一个自定义类,它仅继承自
ReactiveObject
<代码>当前项仅更改一次(当执行命令时)。之后,它一点也没有改变,因为绑定到命令的按钮消失了。好的,一开始我没有意识到MainWindowViewModel和MainViewModel是两个不同的类。因此,MainWindowViewModel的内容首先设置为HomeViewModel的实例,并在执行命令时设置为MainViewModel的实例。那么,您的问题是为什么HomeViewModel的CurrentItem属性在执行命令时不更新?@Đøharrrck是的。我认为您的代码基本上是正确的。尤其是HomeViewModel的实现与。我看到的唯一问题是,当您使用WhenAny订阅CurrentItem observable时,会直接创建MainViewModel。这可以通过在Select语句之前插入
Skip(1)
语句来避免。