在对话框的构造函数中调用.Show()或.ShowDialog是一个好习惯

时间:2018-07-02 14:04:44

标签: c# .net wpf constructor dialog

将.Show()或.ShowDialog()方法作为WPF窗口构造函数的最后一行是一种好习惯吗? 唯一的原因是简化了我的窗口类的使用-通过创建它的实例,我已经在显示它了。

2 个答案:

答案 0 :(得分:5)

我会说不好的做法。如果您想创建实例而不显示它们怎么办?

相反,您可以提供执行此操作的工厂方法:

public static void ShowMyDialog(string text)
{
    // initialize an instance of this dialog 
    // ... and then show
    instance.ShowDialog();
}

答案 1 :(得分:0)

在有继承的情况下,您建议的方法会大打折扣:

public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();
        Title = "W 1";
        ShowDialog();
    }
}

public partial class Window2 : Window1
{
    public Window2()
    {
        InitializeComponent();
        Title = "W 2";
    }
}

尝试创建var w = new Window2();将阻止Window2 ctor的执行,直到关闭标题为“ W 1”的模态窗口。 w.ShowDialog()之后将引发异常。

在正常条件下,

用户可能需要在显示窗口之前设置一些窗口属性,例如设置DataContext。

所以不要违反单一职责原则,而让构造函数和ShowDialog方法分别完成工作