web-dev-qa-db-ja.com

コードビハインドで作成されたオブジェクトへのwpf xamlバインディング

はじめに、私はC#とxamlにかなり慣れていません。

私はバインディングについてチュートリアルを見て、チェックしましたが、見たもののほとんどはxamlでオブジェクトを作成します。ただし、コードでオブジェクトを作成し、そのプロパティにバインドしたいと思います。さらに、後でコードで定義されたいくつかのオブジェクトがあります。一般に、テキストボックスにバインドします。

一般に、私のコードは次のようになります。

MainWindow.xaml.cs

public partial class MainWindow : Window
{
    MyTestObject myTestObject;

    public MainWindow()
    {
        myTestObject= new MyTestObject ();
        this.DataContext = this;
        InitializeComponent();

    }
}

MyTestObject .cs

class MyTestObject : INotifyPropertyChanged
{
    public MyTestObject ()
    {

    }

    private string testString = "Test";
    public string TestString
    {
        get { return testString; }
        set
        {
            if (value == testString) return;
            testString = value;
            this.OnPropertyChanged("TestString");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
            this.PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
    }
}

ソフトウェアは測定データを送信する外部ハードウェアコンポーネントへのインターフェイスとして意図されているため、結局、私はかなりの(数値)プロパティをいくつかのテキストボックスに表示します。私はいくつかのバインド方法を試しましたが、まだ成功していません。前述のプロパティをTextBoxにバインドする方法の例に最も感謝します。

13
xnonamex

DatacontextをmyTestObjectに設定します。または、myTestObjectのパブリックプロパティを作成し、Xamlバインディングを{Binding MyTestObjectPropertyHere.TestString}に設定します

例えば:

public partial class MainWindow : Window
{
    MyTestObject myTestObject;

    public MainWindow()
    {
        myTestObject = new MyTestObject ();

        this.DataContext = myTestObject;

        InitializeComponent();

    }
}

Xaml

<TextBox Text="{Binding Path=TestString}" />

データウィンドウとしてMainWindowにバインドする例:

public partial class MainWindow : Window
{
    MyTestObject myTestObject;

    public MyTestObject MyTestObjectProperty { get { return myTestObject; } }

    public MainWindow()
    {
        myTestObject = new MyTestObject ();

        this.DataContext = this;

        InitializeComponent();

    }
}

Xaml

<TextBox Text="{Binding Path=MyTestObjectProperty.TestString}" />
19
Michael G