RX:'ObservableAsProperty' 绑定属性不会在 gui 上自动更新

RX: 'ObservableAsProperty' bound properties are not automatically updated on gui

我有一个客户端 MyClient,它通过 IObservable 提供新的状态。如文档 (https://reactiveui.net/docs/handbook/view-models/boilerplate-code) 中所述,我创建了一个 ObservableAsProperty 类型的私有 属性 来获取 IObservable 的输出。但要知道我的 GUI 不会根据更改自动更新。

public partial class MainWindow : ReactiveWindow<AppViewModel>
{
    public MainWindow()
    {
        InitializeComponent();
        ViewModel = App.Container.GetInstance<AppViewModel>();
        this.WhenActivated(r =>
            {
                this.OneWayBind(ViewModel, viewModel => viewModel.Status.AoiStatus, view => view.StatusTxtbl.Text).DisposeWith(r);
            });
    }
}

public class AppViewModel : ReactiveObject
{

    public IStatus Status { [ObservableAsProperty] get; }

    public MyClient Client { get; }

    public AppViewModel(MyClient client)
    {
        Client = client;
        Client.StatusStream().ToPropertyEx(this, x => x.Status);
    }
}

public interface IStatus
{
    string AoiStatus { get; }
}

如果我通过 xaml 将 gui 与我的 DataContext 绑定,一切都会按预期进行。 ViewModel.PropertyChanged 被解雇了,所以我不知道那里出了什么问题?!

public partial class MainWindow : ReactiveWindow<AppViewModel>
{
    public MainWindow()
    {
        InitializeComponent();
        ViewModel = App.Container.GetInstance<AppViewModel>();
        DataContext = this;
    }
}

public class AppViewModel : ReactiveObject
{

    public IStatus Status { [ObservableAsProperty] get; }

    public MyClient Client { get; }

    public AppViewModel(MyClient client)
    {
        Client = client;
        Client.StatusStream().ToPropertyEx(this, x => x.Status);
    }
}

public interface IStatus
{
    string AoiStatus { get; }
}
<TextBlock>
    <Run Text="Status:" />
    <Run Text="{Binding ViewModel.Status.AoiStatus, Mode=OneWay}"/>
</TextBlock>

如果您在调度程序线程上观察流,应该可以工作:

public AppViewModel(MyClient client)
{
    Client = client;
    Client.StatusStream().ObserveOnDispatcher().ToPropertyEx(this, x => x.Status);
}