2012-03-19 86 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);