【问题标题】:ReactiveUI - Invoke delegate in view on view model property changeReactiveUI - 在视图模型属性更改时在视图中调用委托
【发布时间】:2019-04-20 12:05:42
【问题描述】:

我刚刚开始使用 ReactiveUI 并正在开发一个小型 WPF 绘图应用程序。我使用的绘图库 (SkiaSharp) 不支持将图像绑定到 XAML 元素,而是调用 XAML 元素的 InvalidateVisual 方法,该方法会触发您响应的 PaintSurface 事件以绘制图像。

所以我想要做的是观察视图模型的一个属性,并在属性更改时调用 InvalidateVisual 方法。

我已尝试通过 WhenAnyValue 观察视图模型的属性并通过在视图的构造函数中设置订阅来调用 InvalidateVisual 方法

this.WhenActivated(disposable =>
   {
      … // property bindings

      this.WhenAnyValue(x => ViewModel.SomeProperty)
         .Do(x => DrawingSpace.InvalidateVisual())
         .Subscribe()
         .DisposeWith(disposable);
   });

但是这会引发 System.NotSupportedException Unsupported expression type 'Constant'

在观察视图模型属性并在属性更改时调用委托的视图中设置订阅的正确方法是什么?

【问题讨论】:

    标签: reactiveui


    【解决方案1】:

    以下是您的问题:

    this.WhenAnyValue(x => ViewModel.SomeProperty)
    

    WhenAnyValue 需要一个基于传入的x 值的表达式。

    所以在这种情况下,正确的方法是

    this.WhenAnyValue(x => x.ViewModel.SomeProperty)
    

    【讨论】:

    • 您也可以只使用Subscribe(propertyValue => { do stuff with property }) 而不是使用Do 运算符。
    • 谢谢,现在工作正常。我也很欣赏订阅提示
    猜你喜欢
    • 2014-01-12
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-19
    • 1970-01-01
    • 2017-12-10
    • 2013-07-29
    相关资源
    最近更新 更多