我正在将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));
}
}
也就是说,当我在对话框中更新“名称”并关闭它时,我希望它更新主模块中的字段。
答案 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
会在这里很闪耀。