Caliburn Micro: DialogResult
11,127
Solution 1
I tend to use the View Model to handle determining what happened in the dialog. For instance, you can have an IsCancelled
property on your UserViewModel
that you can interrogate after returning from the ShowDialog
call. Something like:
public void UserNew() {
var userViewModel = new UserViewModel(this._windowManager);
this._windowManager.ShowDialog(userViewModel);
if (userViewModel.IsCancelled) {
// Handle cancellation
} else {
// Handle other case(s)
}
}
Solution 2
In caliburn micro in your dialogviewmodel which inherits from Screen you can do:
TryClose(true); // for OK
or
TryClose(false); // for Cancel
then you could do:
var vm = IoC.Get<MyViewModel>();
var r = WindowManager.ShowDialog(vm, null, null);
if (r.HasValue && r.Value) {
// do something on OK
}
your xaml of the dialog might look like this:
<Button Content="OK" cal:Message.Attach="[Event Click] = [AcceptButton()]" />
<Button Content="Cancel" cal:Message.Attach="[Event Click] = [CancelButton()]" />
using this namespace:
xmlns:cal="http://www.caliburnproject.org"
This is a detailed code sample of the dialog viewmodel implementation:
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);
}
Author by
Timm Bremus
Updated on June 05, 2022Comments
-
Timm Bremus almost 2 years
I can't find a solution for the following problem:
I open a Dialog with the WindowManager from caliburn micro:
public void UserNew() { this._windowManager.ShowDialog(new UserViewModel(this._windowManager)); }
Now I need a DialogResult when the user close the dialog with the OK button. The ShowDialog method of WindowManager don't return a DialogResult...
Can anyone help me?