2013-03-20 59 views
0

我讓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 

我想申請每個窗口上面的窗口加載設置(在構造函數中)。
我當前的代碼是

public MainWindow(string window) 
{ 
    if(window=="1") 
     { 
     lbl.Content=setting.window1_city 
     } 
    if(window=="2") 
     { 
     lbl.Content=setting.window2_city 
     } 
}and so 

但是,這是非常困難的,如果節數用戶設置更多的應用。如果用戶做了任何更改,那麼我必須根據窗口保存這些值。所以我必須使用更多的if循環。
有沒有其他的方法來實現這個?

+0

是否設置特定類型的變量?還希望這些設置只能在第一次設置或者動態變化後才能在UI上反映出來? – ethicallogics 2013-03-20 06:18:21

+0

是的。需要在UI中動態顯示 – balaji 2013-03-20 06:23:05

+0

您能否通知設置屬性?就像window1_city的變化,你可以通知。如果你可以thn我認爲你可以實現這一點使用條件綁定。 – ethicallogics 2013-03-20 06:27:42

回答

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

您能否使用DataContext爲我的場景提供一個簡單的示例 – balaji 2013-03-20 06:35:00