Caliburn Micro: DialogResult

本文关键字:DialogResult Micro Caliburn | 更新日期: 2023-09-27 18:34:07

我找不到以下问题的解决方案:

我从卡利本微打开一个带有窗口管理器的对话框:

public void UserNew()
{
   this._windowManager.ShowDialog(new UserViewModel(this._windowManager));
}

现在,当用户使用"确定"按钮关闭对话框时,我需要一个对话框结果。WindowManager 的 ShowDialog 方法不返回 DialogResult...

谁能帮我?

Caliburn Micro: DialogResult

在从屏幕继承的对话视图模型中的 caliburn micro 中,您可以执行以下操作:

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"

这是对话框视图模型实现的详细代码示例:

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);
}

我倾向于使用视图模型来处理确定对话框中发生的情况。例如,您可以在UserViewModel上有一个IsCancelled属性,您可以在从ShowDialog呼叫返回后对其进行询问。像这样:

public void UserNew() {
    var userViewModel = new UserViewModel(this._windowManager);
    this._windowManager.ShowDialog(userViewModel);
    if (userViewModel.IsCancelled) {
        // Handle cancellation
    } else {
        // Handle other case(s)
    }
}

WPF 对话框返回可为空的布尔值,而不是 DialogResults。 Caliburn的ShowDialog也返回了bool?

来自 MSDN

对话框通常允许用户接受或取消 它们在对话框关闭之前显示。显示对话框 返回一个可为 Null 的布尔值,该值指定是否 活动已接受或取消。返回值是 窗口关闭之前的 DialogResult 属性。欲了解更多信息 信息,请参阅对话结果。

上面的DialogResult是指System.Windows.Window上名为 DialogResult 的 bool 属性。

如果要返回更复杂的内容,只需在窗口上定义自己的枚举属性,并在对话框关闭后读取其值。