0

我允许 wpf 应用程序的两个实例

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

但是如果用户设置的数量更多,这很难应用。如果用户进行了任何更改,那么我必须根据窗口保存这些值。所以我必须使用更多的 no.of if 循环。
还有其他方法可以实现吗?

4

1 回答 1

0

使用每个窗口DataContext属性传递一个具有所有所需属性的对象,在Startup, before中传递该对象Show。如果应用程序变得更复杂,也许你最好使用一些 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();
        }
    }
于 2013-03-20T06:16:19.597 回答