2012-03-19 85 views
0

有一個MenuItem點擊事件MainMenu_Define_Material它打開一個窗口,名爲材料。我從一個叫txt_density文本框獲取信息和我保存信息在密度並通過具有click事件Material_btn_OK_ClickOK按鈕返回主窗口。打開新窗口時加載之前的會話值

我的問題是,我怎麼能避免每次打開窗口時傳遞上次會話的值材料

我想,一旦密度設置,每次我打開材料窗口,我想看看以前的會話的值。

private void MainMenu_Define_Material(object sender, RoutedEventArgs e) 
{ 
    newWin_material = new Material();    

    newWin_material.btn_OK.Click += new RoutedEventHandler(Material_btn_OK_Click);    

    if (density != -1) 
    { 
     newWin_material.txt_density.Text = density.ToString();    
    } 

    newWin_material.ShowDialog(); 
} 

private void Material_btn_OK_Click(object sender, RoutedEventArgs e) 
{ 
    density = System.Convert.ToSingle(newWin_material.txt_density.Text);  
    newWin_material.Close();    
} 
+0

創建在'Material.xaml.cs'另一構造函數:'公共材料(單密度){使用密度//初始化控制}'' – 2012-03-19 20:33:08

回答

1

不太清楚哪裏是density從何而來,但你可以在uour數據類插入字段,你能堅持下去data layer什麼或可能像ObjectDataProvidermodelview

我們那裏有一種不同的解決方案。其基本思想是:

定義通用的共享數據存儲並保留所有您希望在不同窗口之間共享的值。

定義一個數據類。我在這裏使用static類,static成員Desnity

public static class DataClass 
{ 
    public static double Desnsity; 
} 

後在任意窗口中你可以訪問該字段(讀/寫),像

DataClass.Density 

希望這是顯而易見的。

+0

浮子distance'是在主窗口中,同時' txt_density'在Material窗口中。是否有可能分享像'density'這樣的實例。我使用了引用類,但從未見過這種情況。 – Shibli 2012-03-19 20:19:48

+0

'denaity'是一個可容納一些數據的字段,我猜可能是'double'。因此,將其插入一些共享數據類型,並在您的應用程序中使用它的單個實例。 – Tigran 2012-03-19 20:23:07

+0

我想在最後,你會引導我到MVVM,因爲我需要示例,所以我無法理解。如果你在談論其他的事情,你能否提供一些例子或參考。 – Shibli 2012-03-19 20:26:26

0

WPF中沒有Session的概念。您可以嘗試創建一個靜態變量來執行此操作或應用程序配置值,或通過構造函數傳遞參數。

0

如果您要新建它(例如new Material();),它將以零信息開始。這就是新的功能。在ctor中傳遞值有什麼問題?

嘗試

MainWindow 
{ 
    private newWin_material = new Material(); // just new it ONCE 

    // this may need to be in MainWindow ctor. 
    newWin_material.btn_OK.Click += new RoutedEventHandler(Material_btn_OK_Click);