【问题标题】:DialogResult problem in wpfwpf中的DialogResult问题
【发布时间】:2011-10-07 17:15:36
【问题描述】:

我有一个作为 ShowDialog 打开几次的窗口。

每次打开它我都会使用 new 关键字 我第一次这样做:

var myWindow = new MyWindow();
myWindow.ShowDialog();

我第二次从 MyWindow View Model 类打开它:

new MyWindow().ShowDialog();

在 MyWindow 代码后面我有 2 个事件。一种是用户单击确定,另一种是用户单击取消。

void OnCancel(){
  DialogResult = false;
}

void OnOk(){
  DialogResult = true;
}

从视图模型类触发的事件形成 ICommand Execute,而不是绑定到窗口的“确定”和“取消”按钮。

在 xaml 中,我为取消按钮执行此操作:

IsCancel = true;

这是确定按钮:

IsDefault = true;

在我第一次打开窗口时,我可以设置 DialogResult = true,但之后当我尝试设置 DialogResult 时出现异常“Dialofresult 只能在创建窗口后设置并显示为 ShwDialog”。

我还看到第一次设置为 true 后 DialogResult 为 true,我认为这是异常的原因,但我不明白如果我关闭窗口并使用 new 创建一个新窗口,为什么会保持 true关键字...

任何建议

提前致谢

编辑: 问题是,一旦我单击“确定”按钮,DialogResult 设置为 true 和 saty true,我无法将其设置为 false。

编辑

谢谢大家,我解决了这个问题。

问题是我注册到 View Model 事件(点击“ok”和点击“cancel”),当用户点击“cancel”而不是点击“ok”时我删除了注册......

【问题讨论】:

  • 您是否记住,设置 DialogResult 后窗口会关闭并且必须重新打开?
  • 这段代码运行良好。设置 DialogResult = true 后是否关闭窗口?
  • @hcb 单击“确定”或“取消”后我认为它关闭了它的错误?
  • 你在哪里设置DialogResult? 你应该发布更多代码以便我们了解问题。

标签: c# wpf showdialog dialogresult


【解决方案1】:

设置DialogResult会关闭窗口,所以你不能再次设置DialogResult

顺便说一句,new Window().ShowDialog() 返回 bool?,而不是窗口...

【讨论】:

  • 你能解释一下吗?我错过了一些东西,如果我创建一个新窗口并将其显示为 ShowDialog,为什么我不能再次设置它?我知道它的返回布尔值?。
  • 好的...你能显示更多代码吗?从您发布的代码中,还不是很清楚问题是什么
  • 你将结果分配给一个名为myWindow的变量,这就是为什么我认为你认为它返回了一个窗口......
  • @Thomas:Window.DialogResult 的有趣之处在于,在文档中设置它并不会关闭窗口。还有@Maya:如果您将按钮设置为IsCancel,它会自动将DialogResult 设置为false,这可能就是您收到异常的原因。
  • @sixlettervariables,事实上,DialogResult没有自动设置为 false;在 WinForms 中就是这种情况,但在 WPF 中您必须手动设置它。 @Maya,对不起,我真的不知道是什么导致了问题......
【解决方案2】:

如果我关闭窗口并创建,我不明白为什么要保持真实 使用 new 关键字创建一个新的...

因为您正在初始化一个新窗口。它返回 True,因为正如您第一次解释的那样。

【讨论】:

  • 但是前一个窗口被释放了,为什么当我创建一个新窗口时,DialogResult 是 true 而不是 null?
猜你喜欢
  • 2013-01-26
  • 2010-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-18
  • 2020-07-30
  • 1970-01-01
相关资源
最近更新 更多