2013-11-14 77 views
11

刚开始,我对C#和xaml很陌生。wpf 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)); 
    } 
} 

最终我将有相当多的(数值)属性,它们将显示在几个文本框中,因为s oftware旨在作为发送测量数据的外部硬件组件的接口。我尝试了几种绑定方式,但我还没有成功。我将非常感谢如何将前面提到的属性绑定到TextBox的示例。

回答

16

将Datacontext设置为myTestObject。或者,使公共财产的myTestObject和设置您的XAML绑定到{结合MyTestObjectPropertyHere.TestString}

例如:

public partial class MainWindow : Window 
{ 
    MyTestObject myTestObject; 

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

     this.DataContext = myTestObject; 

     InitializeComponent(); 

    } 
} 

的XAML

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

实例与绑定到主窗口作为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}" /> 
+1

如果我最终将有几个对象,那么我相信我无法设置的DataContext到myTestObject,因为后来我将不能够他们的休息绑定?在这种情况下,猜测公共财产会是一种方式吗? – xnonamex

+1

xnonamex:是的,如果您要绑定到MainWindow中的多个不同对象,则为公共属性。我会用一个例子来更新。 –