gpt4 book ai didi

wpf - 将多个参数传递给 Prism 的 EventAggregator

转载 作者:行者123 更新时间:2023-12-02 02:58:54 25 4
gpt4 key购买 nike

我正在使用 Prism 的 EventAggregator 在模块的 ViewModel 之间进行松散耦合的通信。我在 ViewModelA 中有几个属性(例如 FirstName、LastName),当它们的值发生变化时,需要更新 ViewModelB 中的属性。我当前的解决方案包括:

ViewModelA 发布一个事件,并将新的 FirstName 值作为负载:

 public string FirstName
{
get {return firstName;}
set
{
this.firstName = value;
eventAggregator.GetEvent<PatientDetailsEvent>().Publish(firstName);
}
}

ViewModelB 订阅了事件并相应地更改其 FirstName 属性:

public PatientBannerViewModel(IEventAggregator eventAggregator)
{
this.eventAggregator = eventAggregator;
eventAggregator.GetEvent<PatientDetailsEvent>().Subscribe(UpdateBanner, ThreadOption.UIThread);
}

public void UpdateBanner(string firstName)
{
this.FirstName = firstName;
}

这对于单个属性来说效果很好。它不适用于多个不同的属性,因为 ViewModelB 不知道 ViewModelA 上的哪些属性已更改。 ViewModelB 知道新值是什么,但它不知道要更新哪个属性。

我可以为每个属性创建单独的事件,但这似乎是重复的。仅使用一个事件似乎更干净。理想情况下,发布事件时,ViewModelA 应告诉 ViewModelB 哪个属性已更改。我怎样才能做到这一点?

最佳答案

抱歉,我在 this post 中找到了问题的答案。 This blog post Rachel Lim 的文章也很有帮助。

我们需要的是ViewModelA(发布者)告诉ViewModelB(订阅者)两条信息:

  1. ViewModelA 上的哪些属性发生了变化
  2. 该属性的新值是多少

我们需要传达 2 条信息(即属性),但 Prism 的 EventAggregator 仅采用一个参数,即有效负载。这就是问题所在。

要通过 EventAggregator 传递多条信息(属性),您可以发布一个类实例,将这些属性定义为 EventAggregator 的有效负载。我将此类命名为 PatientDetailsEventParameters,它定义了两个属性:

public class PatientDetailsEventParameters
{
public string PatientProperty { get; set; }
public string Value { get; set; }
}

我在基础结构程序集中创建了此类(与我定义事件的位置相同),所有其他程序集都引用了该类。

然后,您可以将此类的实例发布为有效负载(而不是仅包含 1 个值的字符串)。这允许将多个参数传递到有效负载中。

public string FirstName
{
get
{
return firstName;
}
set
{
this.firstName = value;
eventAggregator.GetEvent<PatientDetailsEvent>().Publish(new PatientDetailsEventParameters() {Value = firstName, PatientProperty = "firstName"});
}
}

您可以在此处看到,在发布 PatientDetailsEvent 时,会创建我的 PatientDetailsEventParameters 的新实例。还设置了两个属性 ValuePatientPropertyPatientProperty 是一个字符串,它告诉 ViewModelB(即订阅者)哪些属性已更改。 Value 是已更改的属性的新值。

关于wpf - 将多个参数传递给 Prism 的 EventAggregator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9612338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com