gpt4 book ai didi

silverlight - 多个 ViewModel 之间的数据共享

转载 作者:行者123 更新时间:2023-12-02 02:22:53 26 4
gpt4 key购买 nike

关于我的问题 how can I bind Bing Pushpins from multiple models?

这对我来说很新,我一直在网上搜索,但似乎有很多不同的 MVVM 方法,然后添加到 WP7,我有点困惑

我现在正在尝试找出在 ViewModel 之间共享数据的最佳方式,或者即使这是最好的方式。

我的意思是我有,比如

我的模型:PeopleModel、BuildingModel我的 ViewModels:PeopleViewModel、BuildingViewModel(包含模型的 Observable 集合)

目前,计时器用于从 Web 服务更新列表。 ViewModel 因为它是静态的,所以能够在应用程序的生命周期内进行更新。虽然我不确定这是最明智的方法,但我需要某种形式的后台同步来满足要求。

People 和 Building 包含一个位置,但不包含任何关于它应该显示为图钉的图像。所以我在想,如果我有一个包含以某种方式链接到 ViewModel 的 MapViewModel 的 map View ,但我不确定您将如何执行此操作。

我查看了 MVVMLight,您似乎可以在开始时注册 ViewModel,这样就可以添加指向其他 ViewModel 的链接,而不用担心它们的生命周期?

然而,考虑到模型中有 map 不感兴趣的额外信息,我想知道是否最好有一个独立的 MapViewModel,其中包含某种类型的自定义图钉列表(例如 PeoplePushpins、BuildingPushpins)。如果我走这条路,我想知道您如何根据其他模型中更新的数据更新 MapViewModel。

我的意思是 PersonViewModel 中的运行计时器检测到列表中的更改,因此更新它自己的列表。我需要向 map 发送通知,告知 map 有更新,然后 map 会根据该更新自行更新。

感谢收到的任何帮助/建议。

最佳答案

借助 MVVMLight,您可以使用消息传递在模型之间发送数据:

//build class to send as message  
public class AddPushPinMessage
{
public PushPin PushPin { get; set; }
}

public class ReceivingViewModel
{
public ReceivingViewModel()
{
Messenger.Default.Register<AddPushPinMessage>(this, (m) => AddPushPin(m));
}

void AddPushPin(AddPushPinMessage msg)
{
//handle message
}
}

public class SendingViewModel
{
private object SendPushPin(PushPin key)
{
Messenger.Default.Send<AddPushPinMessage>(new SetPushPinMessage() { PushPin = key });

return null;
}
}

关于silverlight - 多个 ViewModel 之间的数据共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7316965/

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