【问题标题】:How to edit the contents of a window from another window in WPF如何从WPF中的另一个窗口编辑窗口的内容
【发布时间】:2019-07-22 16:44:57
【问题描述】:

在我的程序中,我有两个窗口,第一个是带有文本框的主窗口,第二个是带有用于更新第一个窗口中的文本框的按钮的输入字段。一般来说,我是使用 WPF 和 C# 编码的初学者,但是有没有办法将我的主窗口的指针或引用传递给第二个窗口,以便第二个窗口可以编辑我的第一个窗口的文本框?这甚至是解决这个问题的正确方法吗?

【问题讨论】:

    标签: c# wpf windows pointers reference


    【解决方案1】:

    WPF 假定您将表单绑定到 ViewModel 对象。该对象可以绑定到多个表单,从而为您提供不同的视图和功能,因此在这种情况下,您需要将相同的 ViewModel 绑定到两个表单,并且在您的编辑表单中更改的内容将自动显示在您的主表单中。

    【讨论】:

      【解决方案2】:

      通常您在主窗口的数据上下文中执行此操作。您使用 IoC 在构造函数中传递弹出通知服务的实例并创建私有引用。您调用显示弹出通知的服务方法,用户可以在其中输入异步(和等待)以获取其响应或使用响应式扩展来订阅该按钮的提交操作。需要注意的是,您只能在调度程序线程中更新 ui,并且不要忘记在使用完窗口后释放订阅。

      【讨论】:

        【解决方案3】:

        您的问题有点含糊,有很多方法可以做到这一点。 Steve Todd 提到的 MVVM 就是其中之一。

        但是,听起来您只是想将窗口作为对话框打开。在后面的第二个窗口代码中,确保您的文本框在 XAML 中有一个名称,然后访问它创建和易于访问的属性来获取和设置您的文本框值。

        public MyTextContent 
        {
         get => this.MyTextBox.Text; 
         set => this.MyTextBox.Text = value;
        }
        

        如果您愿意,可以使用点击事件根据条件(如确定或取消按钮)控制返回值。该窗口包含一个 DialogResult 属性。默认值为 false,因此您需要在某处进行设置。

        this.DialogResult = true; // OK
        

        然后在你的主窗口代码后面,创建一个新的窗口实例,分配它的属性并显示它。这需要在按钮或类似触发器的单击事件期间完成

        var myDialog = new MyDialogWindow()
        {
          MyTextContent = "Textbox Starting Value";
        }
        
        bool? result = myDialog.ShowDialog(); // Returns when the dialog window is closed.
        if(result != null && result)
        {
          this.LocalTextBox.Text = myDialog.MyTextContent; // Copy the text to the main textbox.
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-11-20
          • 2022-01-05
          • 1970-01-01
          • 1970-01-01
          • 2019-06-13
          • 2020-04-17
          • 1970-01-01
          相关资源
          最近更新 更多