我正在用MVVM模式创建一个WPF应用程序的原型。在回答这个问题之后,我设置了一个ModelProviderService,它将模型公开为属性。服务的使用者是视图模型,即他们从服务中提取模型,而不是实例化它们自己。
class ModelProviderService {
private LoginModel loginModel;
public LoginModel LoginModel {
get { return loginModel; }
set { loginModel = value; }
}
private ProjectsModel projectsModel;
public ProjectsModel ProjectsModel {
get { return projectsModel; }
set { projectsModel = value; }
}
public ModelProviderService() {
loginModel = new LoginModel();
projectsModel = new ProjectsModel();
}
}现在,下面是将要发生的事情:
LoginModel属性)。modelService.LoginModel.MyProperty = localLoginModel.MyProperty;将模型属性推回服务。LoginModel类型刚刚改变了。”我如何实施:
发布于 2013-01-18 09:09:46
您可以使用MessageBus或EventAggregator使用弱引用将消息发布到订阅服务器。看看我的实施 (或NuGet封装)。
它还可以通过在HandleOnUIThreadAttribute方法上应用Handle将消息处理封送到UI线程(如果需要更新UI组件)。
在您的情况下,使用情况如下:
// The message
public class LoginModelChanged
{
public LoginModelChanged(LoginModel model)
{
Model = model;
}
public LoginModel Model { get; private set; }
}
// Service that publishes messages
public class ModelProviderService
{
private IMessageBus _messageBus;
private LoginModel _loginModel;
public ModelProviderService(IMessageBus messageBus)
{
_messageBus = messageBus;
}
public LoginModel LoginModel
{
get { return _loginModel; }
set
{
_loginModel = value;
_messageBus.Publish(new LoginModelChanged(value));
}
}
}
// Subscribing ViewModel
public class SomeViewModel : IHandle<LoginModelChanged>
{
public SomeViewModel(IMessageBus messageBus)
{
messageBus.Subscribe(this);
}
public void Handle(LoginModelChanged message)
{
// Do something with message.Model
}
}如果您想了解更多关于内部工作原理和如何实现这一点的知识,请查看GitHub存储库中的源代码。请随意使用您喜欢的代码:)
发布于 2013-01-18 09:06:42
如果您想在WPF应用程序中分发消息,可以使用EventAggregator of 棱镜框架。
EventAggregator允许视图模型对事件进行弱子分段,不需要有关发送方的知识。这使您可以轻松地跨组件或模块分发消息。
https://stackoverflow.com/questions/14395442
复制相似问题