c# - 在不关闭对话框的情况下设置 DialogResult

标签 c# wpf mvvm dialog

正如标题所说,有没有办法在不关闭 Dialog 的情况下设置 DialogResult?

可能最简单的答案是否定的,但尽管如此,这是为什么呢? DialogResult= 背后的行为是什么?有什么办法可以覆盖它。

如果有人问我为什么需要这样的东西,简单的答案就是好奇。这种好奇心背后的“历史”是我试图从我的 ViewModel 调用对话窗口。我的方法是以下方法的混合

如果对话框有返回值(True (Ok)/False (Cancel)),我需要(从对话框 viewModel)传递处理对话框的类的值,然后将其设置为 DialogResult 以便父窗口/控件在对话框返回/关闭时获取它。

用于测试它的最小代码片段类似于

dialog.DialogResult = TheResult;
Debug.WriteLine("Dialog Closed");
dialog.Close();

虽然这不会失败,但在调用 dialog.Close(); 之前将“Dialog Closed”打印到输出时,对话框会关闭。如果我覆盖 Window.Closing 事件,我可以看到它在调用 dialog.DialogResult 时触发,但在调用 dialog.Close(); 时不会触发之后被调用。

注意:正如我所说,整个问题都是“出于好奇”,因为上面的代码有效并且不会损害所需的功能。

最佳答案

这是设计使然,设置 DialogResult 将关闭对话框。检查Source Code for Window.DialogResult

    public Nullable<bool> DialogResult
    {
        get
        {
           ....
        }
        set
        {
             ....
                if (_dialogResult != value)
                {
                    _dialogResult = value;                       
                    if(_isClosing == false)
                    {
                        Close();
                    }
                }
             ...
            }                
        }
    }

关于c# - 在不关闭对话框的情况下设置 DialogResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37414228/

相关文章:

c# - 为什么大家都用2^n个数来分配呢? -> 新的 StringBuilder(256)

c# - C#中的多重继承问题

c# - 主/细节的通用Viewmodel模式

c# - MVVM 和 WPF 结构

c# - 来自 eventTrigger OnPointerDown 的连续输入

c# - 如何在 Windows 窗体中有 2 个连接字符串

c# - 如何将用户交互封装在一个方法中

wpf - 如何在应用程序、窗口或控制级别关闭所有触摸输入?

c# - 文本框周围的部分边框

silverlight - Caliburn.Micro 操作无法正常工作