【问题标题】:wpf xaml binding to object created in code behindwpf xaml 绑定到在后面的代码中创建的对象
【发布时间】:2013-11-27 17:13:54
【问题描述】:

刚开始我对 C# 和 xaml 还是很陌生。

我看过、检查过关于绑定的教程,但我看到的大部分内容都是在 xaml.xml 中创建一个对象。但是我想在代码中创建对象,然后绑定到它的属性。此外,稍后我将在代码中定义几个对象。一般来说,我想绑定到文本框。

一般来说,我的代码如下所示:

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 的示例。

【问题讨论】:

    标签: c# wpf xaml binding


    【解决方案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 作为数据上下文的示例:

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

    【讨论】:

    • 如果我最终会有几个对象,那么我相信我不能将 DataContext 设置为 myTestObject,因为以后我将无法绑定其余的对象?猜猜公共财产在这种情况下会是一条路吗?
    • xnonamex:是的,如果您要绑定到 MainWindow 中的几个不同对象,这是一个公共属性。我会更新一个例子。
    猜你喜欢
    • 2010-12-22
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多