如何在wpf中实现此方案

时间:2013-03-20 06:10:48

标签: wpf

我允许两个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 load(在构造函数中)应用上述设置 我目前的代码是

 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循环 还有其他方法可以实现吗?

1 个答案:

答案 0 :(得分:0)

使用每个窗口DataContext属性传递一个包含所有所需属性的对象,在Startup之前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();
        }
    }