观察其他视图模型中的更改

时间:2019-09-12 18:28:42

标签: observable reactiveui raise

我正在将Reactui与动态数据一起使用。如果所有更改都在同一个视图模型中处理,则效果很好。

我遇到的问题是类中的字段之一实际上来自数据库,该字段在两个视图模型之间共享,如果我在一个视图模型中更新它,我希望它通知对另一个视图模型的更改。我该怎么做。

以前,在典型的事件驱动模型中,我只是订阅事件。

private string _Name;
    [CategoryAttribute("NotUsed "),
    DescriptionAttribute("DisplayName"),
    DisplayName("Name"), Browsable(true) ]
    [ReadOnly(true)]
    public string Name
    {
        get { return _Name; }
        set
        {
            this.RaiseAndSetIfChanged(ref _Name, value);
            this.RaiseValidation(nameof(_Name));

        }
    }

也就是说,当我在对话框中更新“名称”并关闭它时,我希望它更新主模块中的字段。

1 个答案:

答案 0 :(得分:0)

我不是Rx或ReactiveUI专家,但是我要做的方法是创建一个从数据库检索数据的服务。然后,每个ViewModel将以Observable的形式从服务中检索此类。当一个ViewModel更改类时,您需要通知服务已进行了更改。然后,该服务将向所有订阅的ViewModel发送该类已更改的通知。

public class DataService
{
   private BehaviorSubject<MyClass> subject;
   public IObservable<MyClass> => subject.AsObservable();

   public DataService()
   {
      // code to get the data from database and initialize the BehaviorSubject 
      // with the starting data.

       subject = new BehaviorSubject<MyClass>(...instance of class...);
   }

   public void MyClassHasChanged(MyClass class)
   {
      //update database then...
      subject.OnNext(class);
   }
}

如果此数据在列表中...那么DynamicData会在这里很闪耀。