Подтвердить что ты не робот

Привязка wpf xaml к объекту, созданному в коде

Просто для начала я новичок в С# и 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.

4b9b3361

Ответ 1

Установите 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 как datacontext:

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}" />