Вы можете использовать EventAggregator для этой цели.
"Агрегатор событий - это служба, которая предоставляет возможность публикации объекта от одного объекта к другому свободно основанным способом."
Первым шагом будетсоздайте экземпляр EventAggregator в ваших ViewModels и подпишитесь на него.Вы можете сделать это через DI в конструкторе обеих ViewModels.
Для LoginViewModel,
private IEventAggregator _eventAggregator;
public LoginViewModel(FakeData context,IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
}
и MainWindowViewModel,
private IEventAggregator _eventAggregator;
public MainWindowViewModel (IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
_eventAggregator.Subscribe(this);
}
Следующим шагом является создание сообщения.Объект, который может передавать необходимую информацию между ViewModels.
public class OnLoginAttemptMessage
{
string UserName { get; set; }
bool IsLoginSuccessful { get; set; }
}
Наконец, пришло время собрать все воедино.В методе youg LoginButton в LoginViewModel мы модифицируем код, чтобы вызвать событие при успешном входе в систему.
public void LoginButton()
{
bool check = Services.Login.IsValid(Login, Password, context);
if(check) //if login is OK, check == true
{
_eventAggregator.PublishOnUIThread(new OnLoginAttemptMessage
{
UserName = Login,
IsLoginSuccessful = check;
});
TryClose();
}
}
Последний шаг находится в MainWindowViewModel, где необходимо реализовать интерфейс IHandle.
class MainWindowViewModel : Conductor<IScreen>.Collection.OneActive, IHandle<OnLoginSuccessMessage>
{
public void Handle(OnLoginSuccessMessage message)
{
if(message.IsLoginSuccessful)
{
// Login is successfull, do next steps.
}
}
}
Подробнее о EventAggregator можно прочитать здесь (https://caliburnmicro.com/documentation/event-aggregator)