0

我对 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 实例,以便它可以读取和更改它?或者如果我不能以这种方式实现我想要的,我应该怎么做?我知道必须有一个非常简单的解决方案。我不想使用项目设置。

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

4

2 回答 2

0

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

private void button1_Click(object sender, RoutedEventArgs e)
{
    MainWindow MW = Application.Current.MainWindow;
    textBox1.Text = MW._B.Test_String;
}
于 2013-10-15T04:56:44.850 回答
0

you should use same instance of main window on usercontrol's button click . like as follows

var mainwindow =Application.Current.MainWindow;

and using same instance get value

textBox1.Text = mainwindow .Test_String;
于 2013-10-15T05:35:53.133 回答