如何在wpf中实现此场景
我允许wpf应用程序的两个实例如何在wpf中实现此场景,wpf,Wpf,我允许wpf应用程序的两个实例 private void Application_Startup(object sender, StartupEventArgs e) { Process thisProc = Process.GetCurrentProcess(); if (Process.GetProcessesByName(thisProc.ProcessName).Length == 1) { var
private void Application_Startup(object sender, StartupEventArgs e)
{
Process thisProc = Process.GetCurrentProcess();
if (Process.GetProcessesByName(thisProc.ProcessName).Length == 1)
{
var w1 = new MainWindow("1");
w1.Show();
}
else if (Process.GetProcessesByName(thisProc.ProcessName).Length == 2)
{
var w2 = new MainWindow("2");
w2.Show();
}
}
每个窗口具有不同的用户设置,如下所示
在Settings.setting中
window1_city="xxx",window1_country="yyy"
window2_city="aaa",window2_country="bbb" .....etc
我想在windows加载(在构造函数中)上应用上述设置。我现在的代码是
public MainWindow(string window)
{
if(window=="1")
{
lbl.Content=setting.window1_city
}
if(window=="2")
{
lbl.Content=setting.window2_city
}
}and so
但是,如果用户设置的数量更多,则很难应用此功能。若用户做了任何更改,那个么我必须根据窗口保存这些值。因此,我必须使用更多数量的if循环。是否有其他方法实现此功能?使用每个窗口的
DataContext
属性传递一个包含所有所需属性的对象,在启动
中传递该对象,然后再显示
。
如果应用程序变得更复杂,也许你最好使用一些MVVM工具包。
使用普通DataContextes的示例如下:
private void Application_Startup(object sender, StartupEventArgs e)
{
Process thisProc = Process.GetCurrentProcess();
if (Process.GetProcessesByName(thisProc.ProcessName).Length == 1)
{
var w1 = new MainWindow("1");
var a = new MySettings();
a.x=...;
a.y=....;
w1.DataContext=a;
w1.Show();
}
else if (Process.GetProcessesByName(thisProc.ProcessName).Length == 2)
{
var w2 = new MainWindow("2");
var b = new MySettings();
b.x=...;
b.y=....;
w2.DataContext=b;
w2.Show();
}
}
设置变量是否为特定类型?而且,您希望这些设置仅在第一次设置,或者动态设置,就像更改完成后,它应该反映在UI上一样?是的。需要在UICan中动态显示通知设置的属性。如果window1\u城市发生变化,您可以通知。如果可以的话,我想你可以使用条件绑定来实现。你能为我使用DataContext的场景提供一个简单的例子吗