2014-05-09 44 views
0

我有一個有趣的問題。在我的Main.cs代碼中,我有一個方法用於更改UserControl我的MainWindow顯示。下面的代碼:無法更改WPF中的用戶控件

public void NextPage() 
    { 
     if (numberUserControl < 4) 
     { 
      numberUserControl++; 
      SelectUserControl(); 
     } 
    } 


    private void SelectUserControl() 
    { 
     switch (numberUserControl) 
     { 
      case 1: 
       this.contentControl.Content = new UserControls.ServersListControl(); 
       break; 
      case 2: 
       this.contentControl.Content = new UserControls.DepartmentsListControl(); 
       break; 
      default: 
       MessageBox.Show("lol"); 
       break; 
     } 
    } 

(它沒有完成,這就是爲什麼我的默認顯示笑)

當我調用該方法從下一頁我的主窗口,它的作品完美流暢。但是,當我使用此代碼:

 public void Button_Click(object sender, RoutedEventArgs e) 
    { 
     MainWindow main = new MainWindow(); 
     main.NextPage(/*data*/); 
    } 

UserControl不會更改!我使用調試器進行了檢查,代碼在每個塊中傳遞,即使在DepartmentsListControl構造函數中,但是顯示的UserControl不會更改......而且我真的不明白爲什麼!

請幫忙! :)

回答

1

您正在創建MainWindow的新實例,該實例沒有與當前實例的連接。它在範圍之外並且在Button_Click事件結束時立即丟失。

假設按鈕在MainWindow,只是這樣做:

public void Button_Click(object sender, RoutedEventArgs e) 
{ 
    NextPage(/*data*/); 
} 
+0

是的,我現在明白了這個問題,但按鈕是不是在主窗口,他在另一個用戶控制,這就是爲什麼我創建的新的實例,以便能夠訪問該方法! – T2o

+0

在這種情況下,您需要將當前MainWindow實例的引用傳遞給用戶控件。正如你發現的那樣,創建一個新的實例是行不通的。你如何將用戶控件添加到'MainWindow'? –

+0

我通過調用'this.contentControl.Content = new UserControls.ServersListControl(ref this)'在MainWindow中添加用戶控件;' 如何添加MainWindow的引用,它是隻讀的? – T2o