【问题标题】:Load previous session values when open new window打开新窗口时加载以前的会话值
【发布时间】:2012-03-19 20:09:47
【问题描述】:

有一个 MenuItem 点击事件 MainMenu_Define_Material 会打开一个名为 Material 的窗口。我从一个名为 txt_density 的文本框中获取信息,然后将该信息保存在 density 中,并通过 OK-button 具有点击事件 返回主窗口>Material_btn_OK_Click

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

我想,一旦设置了密度,每次我打开Material窗口时,我都想查看上一个会话的值。

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

【问题讨论】:

  • Material.xaml.cs中创建另一个ctor:public Material(Single density){ // init controls using density }

标签: c# wpf


【解决方案1】:

不是很清楚 density 来自哪里,但您可以将该字段插入到您的数据类中,您可以在 data layer 上保留该字段,或者可能类似于 ObjectDataProvider 中的 modelview

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

定义通用的、共享的数据存储,并在其中保存您希望在不同窗口之间共享的所有值。

定义一个数据类。我在这里使用了 static 类和 static 成员 Desnity

public static class DataClass 
{
     public static double Desnsity;
}

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

DataClass.Density

希望这很清楚。

【讨论】:

  • float distance 在主窗口中,而txt_density 在材料窗口中。是否可以共享 density 之类的实例。我使用了引用类,但从未见过实例。
  • denaity 是一个包含一些数据的字段,我认为可能是double。所以将它插入到一些共享数据类型中,并在你的应用程序中使用它的单个实例。
  • 我想最后,你会引导我了解我无法理解的 MVVM,因为我需要示例。如果您在谈论其他事情,您能否提供一些示例或参考。
  • 我不会引导你到MVVM,即使你愿意。我说的和MVVM无关。
  • 是的,似乎可行。最后,我想我可以将DataClass.Density 绑定到txt_density,可以吗?
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    如果您要新建它(例如 new Material(); ),那么它将从零信息开始。这就是 new 所做的。在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); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-27
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多