У меня есть программа, которая подключается к серверу и отправляет ему команды. в моей программе у меня есть 2 окна, одно из них представляет собой панель инструментов с текстовым полем, которое показывает текущий статус (мы назовем это «mainviewmodel»), а другое — окно входа в систему, которое получает имя пользователя и пароль и регистрирует меня на сервере ( мы назовем это "loginviewmodel")
теперь, чтобы mainviewmodel знала модель входа в систему, я использую это:
[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);
вызывается, но это происходит на другой модели представления.
Итак, как я могу уведомить mainviewmodel о том, что caninvokelogin был изменен? Я знаю, что мог бы использовать eventAggregator и отправить сообщение из одной модели просмотра в другую, но это звучит как убийство мухи из пушки, и я уверен, что есть более простой способ,
какие-либо предложения?