【问题标题】:Attempting to share Object between WPF windows尝试在 WPF 窗口之间共享对象
【发布时间】:2015-03-28 16:11:42
【问题描述】:

我在 WPF 应用程序的 MainWindow 中实例化一个类,然后在单击事件时将该对象传递给第二个窗口。但是当我尝试运行传递给 Window_Loaded 方法中的第二个窗口的对象的方法时,我得到了错误:

名称object 在当前上下文中不存在。

这是我的主窗口代码:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }


    Object objectName;

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
            objectName = new Object();
            objectName.Text = "text";




    }
    private void MenuItem_Click(object sender, RoutedEventArgs e)
    {
        Settings settingsWindow = new Settings(objectName);
        settingsWindow.Show();
    }
}

和设置窗口:

public partial class Settings : Window
{
    public Settings(Object object)
    {
        InitializeComponent();
    }

    private void SettingsWindow_Loaded(object sender, RoutedEventArgs e)
    {
        // get text in object
        String name = object.Text;
    }
}

所以我可以将 Object 传递给 Window,但是如何在新的 windows Window_Loaded 方法中使用它?

【问题讨论】:

  • 您正在传递对象,但在设置窗口中没有对它的引用,因为您没有将它本地存储在构造函数中。
  • 使用ViewModel。读取到 MVVM。

标签: c# wpf oop


【解决方案1】:

您不会在设置中实例化对象。

用途:

public partial class  Settings: Window
{
    Object _object;

    public Settings(Object object)
    {
        _object = object
        InitializeComponent();
    }

    private void SettingsWindow_Loaded(object sender, RoutedEventArgs e)
    {
        // get text in object
        String name = _object.Text;
    }

还有一些离题提示:

  • 使用 MVVM
  • 不要直接使用 Object,而是使用更具体的类类型(自己创建)。
  • 将 Settings 重命名为 SettingsWindow,因为您很可能还有一个包含数据的 Settings 类。

【讨论】:

  • 一开始可能会让人不知所措,但如果你进入更大的程序(带有单元测试),它真的会得到回报。
【解决方案2】:

你在一些不同的事情上出错了。首先,您不能使用这种语法使用对象。您只能通过使用反射或将其转换为字典来处理它。所以最好为它实际创建一个类:

class MyClass{
  public string Text;
}

现在在您的设置窗口中进行更改:

我的类对象名;

private void Window_Loaded(object sender, RoutedEventArgs e)
{
        objectName = new MyClass();
        objectName.Text = "text";
}

您需要更改的最后一件事是它看起来像这样的另一种形式:

public partial class  Settings: Window
{
    MyClass _object;

    public Settings(Object object)
    {
        _object = object
        InitializeComponent();
    }

    private void SettingsWindow_Loaded(object sender, RoutedEventArgs e)
    {
        // get text in object
        var name = _object.Text;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多