从新创建的窗口访问主窗口datacontext

Enr*_*ico 2 c# wpf datacontext window

在我的MainWindow中,我创建了一个包含不同设置的类的新实例.设置类的参数后,我将datacontext =设置为该类.

public partial class MainWindow : Window
{

 private MeasConSettings mMeasConSettings = new MeasConSettings();

  public MainWindow()
  {
    InitializeComponent();
    DataContext = mMeasConSettings;
  }

  private void MenuComm_Click(object sender, RoutedEventArgs e)
  {// See code below}

}
Run Code Online (Sandbox Code Playgroud)

现在我还有一个打开一个新窗口的函数,这个窗口包含一个文本框,其文本应绑定到MainWindow的datacontext.

    private void MenuComm_Click(object sender, RoutedEventArgs e)
    {
        FrmSettings newWindow = new FrmSettings();
        newWindow.DataContext = mMeasConSettings;
        newWindow.TxtComm.Text = mMeasConSettings.CommSettings;
        newWindow.Show();
    }
Run Code Online (Sandbox Code Playgroud)

此代码使用正确的内容填充newWindow的文本框,但由于在更改文本框中的文本(新创建的窗口中的TxtComm)后datacontext未更新,因此它不会受到限制.

文本框的XAML代码示例:

<TextBox Grid.Row="1" Grid.Column="3" Margin="2,0"  Name="TxtComm" DataContext="{Binding Path=CommSettings, UpdateSourceTrigger=PropertyChanged}" />
Run Code Online (Sandbox Code Playgroud)

"CommSettings"是MeasConsettings类的成员

public class MeasConSettings
{
    private string mCommSettings;

    public string CommSettings
    {
        get
        {
            return mCommSettings;
        }
        set
        {
            mCommSettings = value;
        }
    }

    public MeasConSettings()
    {
        CommSettings = "Com5:19200,8,n,1";
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是如何调整我的newWindow中的值mMeasConSettings.CommSettings(在我的MainWindow中定义)(按下按钮后创建),如果我在newWindow中更改文本框值,则存储在mMeasConSettings.CommSettings中的值也应该改变了.

PS:我是WPF的新手,欢迎任何建议!

ody*_*jii 5

正如我在评论中所写,您需要将TextTextBox的属性绑定到DataContext要更新的属性.因此,您的XAML应该是这样的:

<TextBox ... Text="{Binding CommSettings, Mode=TwoWay}" />
Run Code Online (Sandbox Code Playgroud)

请注意,我绑定Text的属性TextBox的财产CommSettings你的DataContext.你C#点击事件的代码应该是:

private void MenuComm_Click(object sender, RoutedEventArgs e)
{
    FrmSettings newWindow = new FrmSettings();
    newWindow.DataContext = mMeasConSettings;
    newWindow.Show();
}
Run Code Online (Sandbox Code Playgroud)

我们只需要在DataContext这里设置.请注意,它将DataContext传递给子元素,因此除非特别设置为其他元素,否则TextBox它将与DataContext其父元素相同.