C# WPF 想要将数据存储在一个类中,并在不同 wpf 窗口中的多个不同类中使用

Posted

技术标签:

【中文标题】C# WPF 想要将数据存储在一个类中,并在不同 wpf 窗口中的多个不同类中使用【英文标题】:C# WPF Want to store data in a class and use it in multiple different classes in different wpf windows 【发布时间】:2022-01-19 02:28:48 【问题描述】:

我有 3 节课。第一个存储信息,第二个将信息分配给第一个班级,第三个从第一个班级读取信息。

第一类,未分配给任何 WPF 窗口

public class ProfileInfo //Used to store Name and Surname Data
    
        public string User_Name  get; set; 
        public string User_Surname  get; set; 
    

2nd Class,位于 WPF 窗口 1

public class InsertInfo //Reads data and stores it in Class 1
    
        ProfileInfo p = new ProfileInfo();
        p.User_Name = "Bob"; //Example value but normally is read from db
        p.User_Surname = "Jhones"; //Example value but normally is read from db
    

第 3 类,位于 WPF 窗口 2

public class ReadInfo //Reads data from Class 1 and displays it using MessageBox.Show
    
        ProfileInfo p = new ProfileInfo();
        MessageBox.Show(p.User_Name); // I want this to display Bob but it displays an empty value
        MessageBox.Show(p.User_Surname);
    

我希望 Class 1 存储信息,直到我结束程序,以便我可以检索多个类中的数据。

据我了解,这不起作用,因为在第 3 类中,我需要一个完全不同的第 1 类实例,其中没有存储数据???如果是这样,我该如何完成这项工作?

我在整个互联网上寻找一种在类之间共享数据的方法,但一切似乎都如此困难且难以理解。我是初学者,所以如果可能的话,请尽量用不太专业的语言来解释它。

【问题讨论】:

如果您在互联网上搜索,您感兴趣的是“单例模式”。 PS:“模式”是常见编程问题的常见解决方案(这种“向所有人提供数据的实例”是您遇到的最常见的事情之一)。不要与“上帝对象”反模式混淆。 所以你想要一个只存储一次信息的对象?查找 C# 静态关键字。静态成员/静态函数... 【参考方案1】:

问题是你创建了一个 ProfileInfo 的实例 inside 你的 InsertInfo 类,但是在第三类 ReadInfo 中,你创建了另一个 ProfileInfo 实例,默认情况下,空的。我不知道您系统的详细信息,但您可以尝试将InsertInfo 类中的ProfileInfo 字段设为静态Property,然后您可以从其他类访问它:

public class InsertInfo

    private static ProfileInfo p = new ProfileInfo();
    public static ProfileInfo P  get  return p;  

    public void AssignProfileInfo(string username, string surname)
    
        p.User_Name = username;
        p.User_Surname = surname;
    

然后,要访问存储的 ProfileInfo,您可以访问静态属性:

public class ReadInfo

    ProfileInfo p = InsertInfo.P;

    public void ShowInfo()
    
        MessageBox.Show(p.User_Name); 
        MessageBox.Show(p.User_Surname);
    

【讨论】:

以上是关于C# WPF 想要将数据存储在一个类中,并在不同 wpf 窗口中的多个不同类中使用的主要内容,如果未能解决你的问题,请参考以下文章

我将如何存储类的成员函数?

WPF C# 按钮样式

如何在 HDF5 C# 上创建复合数据集

C# 和 SQLGeometry:结合数据库行和 WPF

如何只处理最后一个任务并在c#中丢弃上一个任务

从 C# 中的属性获取图像 URL