C# 检查窗口是否已打开MVVM

C# 检查窗口是否已打开MVVM,c#,wpf,mvvm,C#,Wpf,Mvvm,我搜索了一下,发现了这个: public static bool IsWindowOpen<T>(string name = "") where T : Window { return string.IsNullOrEmpty(name) ? Application.Current.Windows.OfType<T>().Any() : Application.Curr

我搜索了一下,发现了这个:

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));
        }
publicstaticboolswindowopen(stringname=“”)其中T:Window
{
返回字符串.IsNullOrEmpty(名称)
?Application.Current.Windows.OfType().Any()
:Application.Current.Windows.OfType().Any(w=>w.Name.Equals(Name));
}
但它似乎不起作用。我仍然可以打开多个窗口。我目前的理解是“窗口”的名称是XAML文件的名称,或者是标题?我两种都试过了,我仍然可以多次打开这个窗口

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

public void OpenForm()
{
var taskViewModel=newhistoryempviewmodel(Convert.ToInt32(SelectedEmploye.MatEmp));
EmpHistory X=新的EmpHistory(taskViewModel);
如果(IsWindowOpen(“EmpHistory”))
返回;
X.Show();
}

扩展方法检查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()
{
如果(IsWindowOpen(“EmpHistory”))
返回;
var taskViewModel=newhistoryempviewmodel(Convert.ToInt32(SelectedEmploye.MatEmp));
EmpHistory X=新的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();
}
public void OpenForm()
{
如果(IsWindowOpen())
返回;
var taskViewModel=newhistoryempviewmodel(Convert.ToInt32(SelectedEmploye.MatEmp));
EmpHistory X=新的EmpHistory(taskViewModel);
X.Show();
}
请注意,最好在创建窗口实例之前验证条件

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