检查窗口是否已打开MVVM

时间:2018-07-25 17:54:46

标签: c# wpf mvvm

我搜索了,发现了:

public static bool IsWindowOpen<T>(string name = "") where T : Window
        {
            return string.IsNullOrEmpty(name)
                ? Application.Current.Windows.OfType<T>().Any()
                : Application.Current.Windows.OfType<T>().Any(w => w.Name.Equals(name));
        }

它似乎不起作用。我仍然可以打开多个窗口。我目前的理解是,“ Window”的名称是XAML文件的名称还是标题?我都尝试过,但仍然可以多次打开窗口。

我正在尝试像这样打开窗口(我意识到这可能不是在MVVM中打开窗口的最佳方法):

    public void OpenForm()
    {

        var taskViewModel = new HistoryEmpViewModel(Convert.ToInt32(SelectedEmploye.MatEmp));
        EmpHistory X = new EmpHistory(taskViewModel);
        if (IsWindowOpen<Window>("EmpHistory"))
            return;
        X.Show();

    }

1 个答案:

答案 0 :(得分:0)

扩展方法检查Name属性,但是打开的EmpHistory窗口没有任何窗口。

分配名称:

public void OpenForm()
{
    if (IsWindowOpen<Window>("EmpHistory"))
        return;
    var taskViewModel = new HistoryEmpViewModel(Convert.ToInt32(SelectedEmploye.MatEmp));
    EmpHistory X = new EmpHistory(taskViewModel);
    X.Name = "EmpHistory";
    X.Show();
}

或按具体类型进行测试:

public void OpenForm()
{
    if (IsWindowOpen<EmpHistory>())
        return;
    var taskViewModel = new HistoryEmpViewModel(Convert.ToInt32(SelectedEmploye.MatEmp));
    EmpHistory X = new EmpHistory(taskViewModel);
    X.Show();
}

请注意,在创建窗口实例之前最好先验证条件