我有一个程序可以连接到服务器并向其发送命令。在我的程序中,我有两个窗口,其中一个是带有文本框的工具栏,用于显示当前状态(我们将其称为“mainviewmodel”),而另一个是登录窗口,接收用户名和密码并将我登录到服务器(我们将其称为“loginviewmodel”)。
现在,为了让mainviewmodel知道loginviewmodel,我使用以下方法:
我的问题是 - 在视图中,状态不会更新,除非
被称为,所以我需要在任何时候调用它。
现在,为了让mainviewmodel知道loginviewmodel,我使用以下方法:
[Import]
Private LoginViewModel loginViewModel;
从mainviewmodel启动登录窗口,我有以下功能:
public void Login()
{
if (!loginViewModel.CanInvokeLogin)
return;
if (loginViewModel.IsActive)
{
loginViewModel.Focus();
}
else
{
windowManager.ShowWindow(loginViewModel);
}
}
正如您所看到的 - 在loginviewmodel中,我有一个名为CanInvokeLogin的属性,用于指示登录是否正在进行。
在mainviewmodel中,我有一个属性,用于显示当前客户端状态(绑定到视图的文本框)。
public string TextboxDescription
{
get
{
switch (AvailabilityStatus.Type)
{
case AvailabilityStatusType.READY:
return ("Ready");
case AvailabilityStatusType.BREAK:
return (AvailabilityStatus.Reason);
case AvailabilityStatusType.DISCONNECTED:
if (!loginViewModel.CanInvokeLogin)
{
return ("Conencting");
}
return ("connected");
default:
return ("Please wait...");
}
}
}
}
我的问题是 - 在视图中,状态不会更新,除非
NotifyOfPropertyChange(() => TextboxDescription);
被称为,所以我需要在任何时候调用它。
NotifyOfPropertyChange(() => CanInvokeLogin);
正在调用,但这发生在另一个视图模型上。
那么,我如何通知主视图模型caninvokelogin已更改? 我知道我可以使用事件聚合器从一个视图模型发送消息到另一个视图模型,但这听起来像用大炮打蚊子,我敢打赌有一个更简单的方法,
任何建议?