reactiveui - 使用 ReactiveUI 进行 Xaml 绑定(bind)时避免绑定(bind)错误

标签 reactiveui

我喜欢 ReactiveUI 的基于代码的绑定(bind)机制。但是,有时您需要使用 XAML 绑定(bind)。在这些情况下,需要在 View 和 ViewModel 之间正确设置 DataContext。我一直在 View 构造函数中这样做:

    public MyView()
    {
        InitializeComponent();

        this.WhenActivated(disposables =>
            {
                 this.DataContext = this.ViewModel;

                 ...
            });
    }

这可行,但我在运行时的输出窗口中出现错误:
System.Windows.Data Error: 40 : BindingExpression path error: ...

我正在使用 ReactiveUserControls、ViewModelViewHosts,并在 Locator 中注册 View/ViewModel 映射并让 ReactiveUI 解决它们。我想我会尽早设置 DataContext 。因此,当我需要使用 XAML 绑定(bind)时 - 是否有另一种设置 DataContext 以避免幻像调试输出错误的方法?

最佳答案

您所拥有的问题是您永远不会自适应地获得 ViewModel 的新版本,并且您可能会延迟订阅。

您最好考虑使用 WhenAnyValue() 运算符,例如:

this.WhenAnyValue(x => x.ViewModel).Bindto(this, x => x.DataContext);

考虑仍然在您的 WhenActivated() 中播放它,因为这将避免内存泄漏,否则保留对 IDisposable 的引用并在您的 View 关闭时进行处置。

关于reactiveui - 使用 ReactiveUI 进行 Xaml 绑定(bind)时避免绑定(bind)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51827412/

相关文章:

c# - 如何分离 IObservable 和 IObserver

mvvm - 有谁知道 ReactiveUI 的 ReactiveCommand 的好例子吗?

c# - 用户确认的异步命令执行

c# - 如何使用 ReactiveUI 在 ViewModel 停用时正确取消任务?

c# - 如何使用带有反应式 UI 的 Xamarin Android 将数据绑定(bind)到自定义 ListView

c# - 响应式(Reactive) UI/响应式(Reactive)扩展 : how to clear ObservableAsPropertyHelper

c# - 一般的 ReactiveUI、View/ViewModel 注入(inject)和 DI

wpf - ReactiveUI ReactiveCommand canExecute 使用Subject<bool> 不起作用

c# - 使用 ReactiveUI 禁用和启用文本字段更改上的按钮

mvvm - 在 ReactiveUI 中引发 propertychanged 的​​正确方法