在C#中实现消息/订阅机制
发布时间:2020-12-15 07:57:26 所属栏目:百科 来源:网络整理
导读:我正在使用MVVM模式对 WPF应用程序进行原型设计.在回答了 this question之后,我设置了一个ModelProviderService,它将模型公开为属性.服务的消费者是视图模型,即他们从服务中提取模型而不是自己实例化. class ModelProviderService { private LoginModel logi
我正在使用MVVM模式对
WPF应用程序进行原型设计.在回答了
this question之后,我设置了一个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(); } } 现在,这是将要发生的事情: > viewmodel更改例如LoginModel属性. 我该如何实现: >“广播信息”? 解决方法
您可以使用MessageBus或EventAggregator通过使用弱引用向订阅者发布消息.看看
my implementation(或
the NuGet packgage).
它还可以通过在Handle方法上应用HandleOnUIThreadAttribute来为您编组消息处理到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 repository中的源代码.随意使用代码:) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |