我需要帮助创建一个类来存储整个项目(包括用户控件)的数据

本文关键字:数据 项目 包括 用户 存储 控件 一个 帮助 创建 | 更新日期: 2023-09-27 18:35:26

我对 WPF 仍然很陌生,我花了一周时间试图理解 MVVM,但运气不太好,但我并没有特别尝试遵循这些规则,我只需要将信息存储到一个类中,以便我所有用户控件都可以访问它并更改它。这是我到目前为止所拥有的:

namespace WpfApplication2.Funtions
{
    public class Binder : INotifyPropertyChanged
    {
        #region INotifyPropertyChanged Members
        public event PropertyChangedEventHandler PropertyChanged;
        private void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
        #endregion
        private string _Test_String;
        public string Test_String 
        { 
            get { return _Test_String; }
            set { _Test_String = value; OnPropertyChanged("Test_String"); }
        }
    }
}

用户控制:

public partial class UserControl1 : UserControl
{
    //Funtions.Binder _B = new Funtions.Binder();
    public UserControl1()
    {
        InitializeComponent();
    }
    private void button1_Click(object sender, RoutedEventArgs e)
    {
        MainWindow MW = new MainWindow();
        textBox1.Text = MW._B.Test_String;
    }
}

主窗口:

public partial class MainWindow : Window
{
    public Funtions.Binder _B = new Funtions.Binder();
    public MainWindow()
    {
        InitializeComponent();
        _B.Test_String = "HELLO";
    }
    private void button1_Click(object sender, RoutedEventArgs e)
    {
       _B.Test_String =  "Hello from main";
    }

}

我看到这里发生了什么,用户控件正在创建 MainWindow 的新实例,因此它的值不同,但是我如何实际访问 MainWindow 从 usercontrol1 创建的同一 Binder 实例,以便它可以读取和更改它? 或者如果我不能以这种方式实现我想要的东西,我应该怎么做?我知道必须有一个非常简单的解决方案。我不想使用项目设置。

请不要介意超级菜鸟问题,但我已经困了好几天了,我只需要一个简单的解释和解决方案,我就会上路。谢谢。

我需要帮助创建一个类来存储整个项目(包括用户控件)的数据

您需要获取主窗口的实例,而不是像您发现的那样创建一个新窗口。

private void button1_Click(object sender, RoutedEventArgs e)
{
    MainWindow MW = Application.Current.MainWindow;
    textBox1.Text = MW._B.Test_String;
}
您应该

在用户控件的按钮单击时使用相同的主窗口实例。 如下所示

var mainwindow =Application.Current.MainWindow;

并使用相同的实例获取值

textBox1.Text = mainwindow .Test_String;