首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Caliburn Micro: DialogResult

Caliburn Micro: DialogResult
EN

Stack Overflow用户
提问于 2012-05-15 17:11:11
回答 3查看 11K关注 0票数 5

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

我用caliburn micro的WindowManager打开了一个对话框:

代码语言:javascript
复制
public void UserNew()
{
   this._windowManager.ShowDialog(new UserViewModel(this._windowManager));
}

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

有谁可以帮我?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-16 00:07:19

我倾向于使用View Model来处理对话框中发生的事情。例如,您可以在您的UserViewModel上有一个IsCancelled属性,您可以在从ShowDialog调用返回后查询该属性。类似于:

代码语言:javascript
复制
public void UserNew() {
    var userViewModel = new UserViewModel(this._windowManager);
    this._windowManager.ShowDialog(userViewModel);
    if (userViewModel.IsCancelled) {
        // Handle cancellation
    } else {
        // Handle other case(s)
    }
}
票数 9
EN

Stack Overflow用户

发布于 2013-10-10 18:26:51

在caliburn micro中的对话框视图模型中,继承自Screen,您可以:

代码语言:javascript
复制
TryClose(true); // for OK

代码语言:javascript
复制
TryClose(false); // for Cancel

然后你可以这样做:

代码语言:javascript
复制
var vm = IoC.Get<MyViewModel>();
var r = WindowManager.ShowDialog(vm, null, null);

if (r.HasValue && r.Value) {
  // do something on OK
}

对话框的xaml可能如下所示:

代码语言:javascript
复制
<Button Content="OK" cal:Message.Attach="[Event Click] = [AcceptButton()]" />
<Button Content="Cancel" cal:Message.Attach="[Event Click] = [CancelButton()]" />

使用此命名空间:

代码语言:javascript
复制
xmlns:cal="http://www.caliburnproject.org"

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

代码语言:javascript
复制
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);
}
票数 10
EN

Stack Overflow用户

发布于 2012-05-15 17:27:07

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

来自MSDN

对话框通常允许用户接受或取消在对话框关闭之前显示的任务。ShowDialog返回一个可以为空的布尔值,该值指定活动是被接受还是被取消。返回值是窗口关闭前DialogResult属性的值。有关详细信息,请参阅DialogResult。

上面的DialogResult引用了System.Windows.Window上名为DialogResult的bool属性。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10597534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档