2014-10-09 96 views
1

我有3個窗口,我可以在它們之間切換。我遇到的問題是窗口不隱藏時不保存數據。我想他們正在被處置,但我不知道如何。我在兩個窗口上有一個文本框來測試這個。當只有兩個窗口時它工作正常,但添加第三個窗口就產生了這個問題。這是我的主窗口。WPF,在多個窗口之間切換而不處置

public partial class MainWindow : Window 
{ 
    private AutoImport auto; 
    private DTLegacy dleg; 

    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    public MainWindow(AutoImport parent) 
    { 
     InitializeComponent(); 
     auto = parent; 
    } 

    public MainWindow(DTLegacy parent) 
    { 
     InitializeComponent(); 
     dleg = parent; 
    } 

    private void btnAutoImport_Click(object sender, RoutedEventArgs e) 
    { 
     this.Hide(); 
     if (auto == null) { auto = new AutoImport(); } 
     auto.Show(); 
    } 

    private void btnDTLegacy_Click(object sender, RoutedEventArgs e) 
    { 
     this.Hide(); 
     if (dleg == null) { dleg = new DTLegacy(); } 
     dleg.Show(); 
    } 
} 

窗口1

public AutoImport() 
{ 
    InitializeComponent(); 
} 

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    this.Hide(); 
    MainWindow main = new MainWindow(this); 
    main.Show(); 
} 

窗口2

public DTLegacy() 
{ 
    InitializeComponent(); 
} 

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    this.Hide(); 
    MainWindow main = new MainWindow(this); 
    main.Show(); 
} 

我想答案可能是創建一個窗口類的某種,但我不知道這是什麼會看起來像。

+0

有兩個概念。在'wpf'(和'mvvm'一起)中,最好是在處理窗口的時候。只需保留所有需要恢復狀態的視圖模型:焦點,選擇,輸入/選擇值等。另一個概念是創建窗口一次,然後永遠不要處理它們(着名的'winforms''隱藏技巧),它應該仍然在wpf中工作。在啓動時創建Windows實例,永遠不會再創建實例(就像你做的那樣!),但是調用該實例的'Hide()'/'Show()'方法。 – Sinatr 2014-10-09 14:44:34

回答

1

爲什麼每次都創建一個新的MainWindow實例?你目前正在隱藏它,所以再次展示它而不是創建一個新的。 假設這是你的應用程序的主窗口和AutoImport/DTLegacy是「孩子」窗口,一個解決辦法是到MainWindow實例傳遞的「孩子」窗口的參數,這樣就可以方便地調用.Show()

private MainWindow parent; 
public AutoImport(MainWindow parent) 
{ 
    InitializeComponent(); 
    this.parent = parent; 
} 

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    this.Hide(); 
    this.parent.Show(); 
}