使用ReactiveUI进行Xaml绑定时避免绑定错误

时间:2018-08-13 17:11:16

标签: reactiveui

我喜欢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的方法来避免幻像调试输出错误?

1 个答案:

答案 0 :(得分:1)

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

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

java.lang.ArrayIndexOutOfBoundsException: 4096
    at com.sun.imageio.plugins.gif.GIFImageReader.read(GIFImageReader.java:984) ~[na:1.8.0_171]
    at javax.imageio.ImageIO.read(ImageIO.java:1448) ~[na:1.8.0_171]
    at javax.imageio.ImageIO.read(ImageIO.java:1352) ~[na:1.8.0_171]

考虑仍在 WhenActivated()中播放它,因为这样可以避免内存泄漏,否则请保留对 IDisposable 的引用,并在关闭视图后进行处理。 / p>