我搜索了,发现了:
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();
}
答案 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();
}
请注意,在创建窗口实例之前最好先验证条件