我需要帮助创建一个类来存储整个项目(包括用户控件)的数据
本文关键字:数据 项目 包括 用户 存储 控件 一个 帮助 创建 | 更新日期: 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;