【发布时间】:2011-07-26 20:26:27
【问题描述】:
我有一个管理客户和地址的经典业务应用程序。
选项卡项(Id、GenericInfo 等)各有自己的 ViewModel。
有一个 MainViewModel 处理客户端及其地址的保存和加载命令。
我们从 WCF 服务中检索数据。从每个 WCF 函数接收/发送的数据聚合在不同的容器中。
在我的 MainViewModel 中,我创建了一个 SaveContainer,然后将其与信使一起发送。
public void Save()
{
var container = new SaveContainer();
MessengerInstance.Send(container);
//the container is now populated and ready to be sent via WCF
Console.WriteLine(container.User.Name);
Console.WriteLine(container.Address.StreetName);
Console.WriteLine(container.Address2.StreetName);
}
在我的 UserViewModel 中为该容器注册,然后 viewmodel 用它拥有的数据(用户)填充它。
public UserViewModel()
: base(Messenger.Default)
{
User = new User();
MessengerInstance.Register<SaveContainer>(this, (x) => x.User = User);
}
在我的 AddressViewModel 中我也这样做。
public AddressViewModel()
: base(Messenger.Default)
{
Address = new Address();
Address2 = new Address() { StreetName = "Washington Street" };
MessengerInstance.Register<SaveContainer>(this, x =>
{
x.Address = Address;
x.Address2 = Address2;
});
}
当我必须加载数据时,我也会这样做。
在我发送消息后,我假设每个注册的 ViewModel 都收到了消息并进行了处理。我假设错了吗?您认为这种方式是使用 Messenger 的正确方式吗?你会改进什么?
【问题讨论】:
标签: c# wpf mvvm-light