【问题标题】:Secondwindow can't acces Textboxes of Mainwindow第二个窗口无法访问主窗口的文本框
【发布时间】:2019-09-12 08:17:55
【问题描述】:

所以我有两个窗口。 第一个窗口使用文本框、组合框等存储所有数据。 在第二个窗口中,我希望用户输入一些信息,并根据我想在主窗口中更改某些内容的信息。

我变了 公共部分类 Window2:窗口 至 公共部分类 Window2 : MainWindow

但还是不行。


public partial class MainWindow : Window
    {
        int Languagetoken = 1; 

        public MainWindow()
        {
            InitializeComponent();
            DateTextBox.Text = DateTime.Now.ToShortDateString(); 
        }

...



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

不知道怎么做。上面的代码不在同一个 xaml 中,它们只是显示了两者的初始化。

【问题讨论】:

  • 这个问题可能会为您指明正确的方向。 stackoverflow.com/questions/34047083/…
  • 两个窗口应该共享一个共同的视图模型(它们的 DataContext 中的一个对象)。两个窗口中的 UI 元素将绑定到视图模型的属性。在网络上搜索数据绑定和 MVVM。
  • 你尝试了什么?如果您在MainWindow 中有对Window2 的引用,您应该能够访问其内部字段。
  • window2 的引用是什么样的......我想我不明白。
  • @check2410:您目前如何打开Window2

标签: c# wpf


【解决方案1】:

有几种方法可以解决这个问题,但在您的情况下,最简单的一种可能是在创建 Window2 时注入 MainWindow 的引用:

Window2 win = new Window2(this); 

窗口2:

public partial class Window2 : Window
{
    private readonly MainWindow _mainWindow;

    public Window2(MainWindow mainWindow)
    {
        _mainWindow = mainWindow;
        InitializeComponent();
    }

    ...
}

然后您可以使用_mainWindow 引用访问Window2MainWindow 的任何内部或公共成员,例如:

_mainWindow.textBlock1.Text = "...";

【讨论】:

  • 太棒了。
  • 它很好用,你能解释一下,这样我就可以真正理解一切了。
  • @check2410:谷歌或必应进行依赖注入,你应该会找到很多信息。正如我在答案中所写,Window2 被注入了 MainWindow 的实例。
【解决方案2】:

默认情况下,文本框和所有其他控件由代表表单的类中的 private 成员变量表示,因此您将无法访问它。

为了从外部访问它,您可以在第一个窗口内添加一个属性...

public string DataText
{
    get
    {
        return DataTextBox.Text;
    }
    set
    {
        DataTextBox.Text = value;
    }
}

或者您可以将控件的访问级别更改为internalpublic,以便您可以通过对窗口的引用来访问它。

【讨论】:

    猜你喜欢
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-07
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多