【问题标题】:Avoiding binding errors when doing Xaml binding with ReactiveUI使用 ReactiveUI 进行 Xaml 绑定时避免绑定错误
【发布时间】:2018-08-13 17:11:15
【问题描述】:

我喜欢 ReactiveUI 的基于代码的绑定机制。但是,有时您需要使用 XAML 绑定。在这些情况下,需要在 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 绑定时 - 是否有另一种方法来设置 DataContext 以避免幻像调试输出错误?

【问题讨论】:

  • this.WhenAnyValue(x => x.ViewModel).BindTo(this, x => x.DataContext);可能会更快。
  • 好电话!将 WhenActivated 替换为您建议的内容,这样就不会触发调试错误。

标签: reactiveui


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2017-06-18
    • 1970-01-01
    • 2012-02-19
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    相关资源
    最近更新 更多