ReactiveUI - вызывает делегат в представлении при изменении свойства модели представления - PullRequest
1 голос
/ 20 апреля 2019

Я только начинаю работать с ReactiveUI и работаю над небольшим приложением для рисования WPF.Используемая мной библиотека рисования (SkiaSharp) не поддерживает привязку изображения к элементу XAML, вместо этого вы вызываете метод InvalidateVisual элемента XAML, который запускает событие PaintSurface, на которое вы отвечаете, чтобы нарисовать изображение.

Итак, что я пытаюсь сделать, это наблюдать свойство модели представления, и при изменении свойства вызывать метод InvalidateVisual.

Я попытался WhenAnyValue наблюдать свойство модели представленияи Do, чтобы вызвать метод InvalidateVisual, настроив подписку в конструкторе представления, таким образом

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

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

Однако это выдает System.NotSupportedException Неподдерживаемый тип выражения «Константа»

Какой правильный способнастроить подписку в представлении, которое наблюдает за свойством модели представления и вызывает делегат при изменении свойства?

1 Ответ

0 голосов
/ 20 апреля 2019

Ваша проблема заключается в следующем:

this.WhenAnyValue(x => ViewModel.SomeProperty)

WhenAnyValue необходимо выражение, основанное на переданном в x значении.

Таким образом, в этом случае правильным подходом будет

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