打开新窗口时加载以前的会话值

时间:2012-03-19 20:09:47

标签: c# wpf

有一个MenuItem点击事件 MainMenu_Define_Material ,会打开一个名为材料的窗口。我从名为 txt_density 的文本框中获取信息,然后将该信息保存在密度中,并通过 OK按钮返回主窗口,点击事件 Material_btn_OK_Click 即可。

我的问题是,每次打开窗口材料时,如何避免传递最后一个会话值?

我希望,一旦设置了密度,每次打开材料窗口时,我都希望看到上一个会话的值。

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

3 个答案:

答案 0 :(得分:1)

不清楚density来自何处,但您可以在您的数据类中插入该字段,您可以在data layer上插入,或者ObjectDataProvider modelview }。

我们在那里有很多不同的解决方案。基本思路是:

定义通用的共享数据存储,并保留您想要在不同窗口之间共享的所有值。

定义数据类。我在这里使用了staticstatic成员Desnity

public static class DataClass 
{
     public static double Desnsity;
}

在任何窗口中,您都可以访问该字段(读/写),例如

DataClass.Density

希望这很清楚。

答案 1 :(得分:0)

WPF中没有Session的概念。您可以尝试创建静态变量来执行此操作或创建应用程序配置值或通过构造函数传递参数。

答案 2 :(得分: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);