Я использую микрофон caliburn. Моя проблема заключается в том, как управлять диалоговыми окнами. Самая большая проблема в том, что, поскольку, когда вы не используете окно, ваш код не останавливается и не ждет.MVVM множественные диалоги головная боль
Так что я сделал что-то вроде этого.
public void ShowDialog(IScreen dialogModel, Action<object> callback = null)
{
ActivateItem(dialogModel);
if (callback != null)
dialogModel.Deactivated += delegate { callback(dialogModel); };
}
Это много, например problem.For в случае, если я хочу, чтобы показать диалог, а затем в обратном вызове я хочу, чтобы показать диалоговое окно B в определенных случаях наступает problem.I должны написать дополнительные функции для DoSomething чтобы не duplicate.And я потерять все другие местные проблемы variables..The больше, когда больше уровней требуется ..
showDialog(A, (cb)=>{
if(...) {
showDialog(B,(cb2)=>{
DoSomething();
});
}
else{
DoSomething();
}
});
также потому, что я хотел показать один диалог в то время я расширенной Collection.OneActive , Но это тоже проблема. В деактивировать обратный вызов события я не мог закрыть все, если бы захотел! Поскольку в памяти сохраняется следующая ссылка после деактивации, и даже если вы ее очистите, она снова появляется.
Спасибо за ваши предложения! Я попытаюсь написать все свои дела, используя ваше предложение, и придумать ответ. Но небольшая проблема, которая, может быть, мне нужна. Позволяет сказать, что я показываю диалог для оплаты, а затем я решаю, что мне нужно второе диалоговое окно. Пока все в порядке. Но в случае, если я покажу второй диалог для пароля, тогда как я могу отключить ВСЕ экраны? http://stackoverflow.com/questions/14896149/caliburn-micro-conductor-problems здесь у меня возникла проблема, потому что после деактивации CM сохраняет ссылку на следующую viewModel, и даже если вы очистите и закроете все, она добавит ее снова. – GorillaApe
только обходной путь, который работал, заключался в том, чтобы не использовать TryClose, но (this.Parent как DialogConductorViewModel) .DeactivateItem (это, false); – GorillaApe