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();
}