В Caliburn микро в вашем dialogviewmodel, который наследуется от экрана вы можете сделать:
TryClose(true); // for OK
или
TryClose(false); // for Cancel
, то вы можете сделать:
var vm = IoC.Get<MyViewModel>();
var r = WindowManager.ShowDialog(vm, null, null);
if (r.HasValue && r.Value) {
// do something on OK
}
ваш XAML из диалог может выглядеть так:
<Button Content="OK" cal:Message.Attach="[Event Click] = [AcceptButton()]" />
<Button Content="Cancel" cal:Message.Attach="[Event Click] = [CancelButton()]" />
используя это пространство имен:
xmlns:cal="http://www.caliburnproject.org"
Это подробный пример кода диалогового реализации ViewModel:
public bool CanAcceptButton
{
get { return true; /* add logic here */ }
}
public void AcceptButton()
{
TryClose(true);
}
public bool CanCancelButton
{
get { return true; }
}
public void CancelButton()
{
TryClose(false);
}
Спасибо, это хорошее решение! –
см. Мой ответ, где вам нужно только наследовать от экрана, и вам не нужно добавлять свойство к vm. – juFo