1

我正在使用 MVVM 模式对 WPF 应用程序进行原型设计。该应用程序应有两个窗口:MainWindowLoginWindow

Model包含两个属性:UsernamePassword

LoginWindow负责处理用户输入的用户名和密码,因此相应的视图模型会更新这些属性。但是,MainWindow还需要访问用户名和密码以供以后与客户端对象一起使用。

我该如何处理?

Model将创建的实例传递LoginViewModelMainWindowViewModel的构造函数?

4

1 回答 1

1

您需要的是一个 Messenger/Event Aggregator。事件聚合器是一个代理对象,您可以对其进行引用并指定要接收的事件类型,而无需获取引用,甚至无需了解生成事件的对象。

Prism 的 EventAggregator 是最常见的一种。请参阅:事件聚合器

所以:

视图模型 1:

public ViewModel1(IEventAggregator eventAggregator)
{
    _eventAggregator=eventAggregator;
}
private void SendMessage()
{
    _eventAggregator.GetEvent<UserLogin>().Publish(new UserLogin(_userName,_password);
}

视图模型 2:

public ViewModel2(IEventAggregator eventAggregator)
{
    _eventAggregator=eventAggregator;
    _eventAggregator.GetEvent<UserLogin>().Subscribe(UserLoginReceived,ThreadOption.BackgroundThread,true);
}

private void UserLoginReceived(UserLogin login)
{
  //do what you like here
}

发生的事情是 eventtaggregator 被传递给两个视图模型。ViewModel1 发布一条消息,但不知道谁(如果有人)在听它。ViewModel2 已订阅该事件并正在侦听发布者向其发送消息。

使用这种方法,您可以让您的视图模型进行通信,而无需它们相互引用。

于 2012-11-19T21:18:41.920 回答