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) 内のテキストを変更した後にデータ コンテキストが更新されないため、バインドされたプロパティは取得されません。

テキスト ボックスの 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 で定義) を調整する方法です。変更されます。

PS: 私は WPF が初めてなので、どんなアドバイスも大歓迎です!

4

2 に答える 2

5

コメントに書いたように、TextあなたTextBoxのプロパティDataContextを更新したいのプロパティにバインドする必要があります。したがって、XAML は次のようになります。

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

のプロパティをあなたのTextプロパティにバインドしていることに注意してください。クリックイベントのコードは次のようになります。TextBoxCommSettingsDataContextC#

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 に答える