2

在我的 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}

}

现在我还有一个打开新窗口的功能,这个窗口包含一个文本框,其文本应该绑定到主窗口的数据上下文。

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

此代码使用正确的内容从 newWindow 填充文本框,但它没有得到绑定属性,因为在更改文本框中的文本(新创建的窗口中的 TxtComm)后 datacontext 没有得到更新。

文本框的 XAML 代码示例:

<TextBox Grid.Row="1" Grid.Column="3" Margin="2,0"  Name="TxtComm" DataContext="{Binding Path=CommSettings, UpdateSourceTrigger=PropertyChanged}" />

“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";
    }
}

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

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

4

2 回答 2

5

正如我在评论中所写,您需要将您的Text属性绑定到您要更新TextBox的属性。DataContext因此,您的 XAML 应该类似于:

<TextBox ... Text="{Binding CommSettings, Mode=TwoWay}" />

请注意,我将 的Text属性绑定TextBoxCommSettings您的DataContext. 你C#的点击事件代码应该是:

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

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

于 2013-03-21T14:09:20.543 回答
1

使用静态属性:

class Demo
{
    public static string SomeSettings {get;set;}
    private onLoad()
    {
        SomeSettings=... //Init here
    }
}

在其他文件中:

Demo.SomeSettings=....
于 2013-03-21T14:03:00.177 回答