我找不到以下问题的解决方案:
我从卡利本微打开一个带有窗口管理器的对话框:
public void UserNew()
{
this._windowManager.ShowDialog(new UserViewModel(this._windowManager));
}
现在,当用户使用"确定"按钮关闭对话框时,我需要一个对话框结果。WindowManager 的 ShowDialog 方法不返回 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
属性。
如果要返回更复杂的内容,只需在窗口上定义自己的枚举属性,并在对话框关闭后读取其值。