2013-07-11 134 views
0

首先对不起我的英文。数据绑定属性不起作用

我正在开发一个WP7应用程序,并且我还没有完全理解数据绑定结构。我有一个通过数据绑定获得一些数据的页面。数据是在.cs中生成的,并且工作正常。

但在另一页上,我也有一些数据从数据绑定中获得,但我希望它来自UI输入文本。这很简单,只是一个文本框和一个文本块,所以用户在文本框上写东西,所以它显示在同一页面上的文本块中。但它不工作,文本块保持空白。

这件事情是这样的:

<TextBox Name="TestInput"> 
<TextBlock Text="{Binding TestText}"> 

以上是什么的XAML。

public partial class NewItem : PhoneApplicationPage 
{ 
    public String TestText { get; set; } 

    public NewItem() 
    { 
     InitializeComponent(); 
     TestText = "TestInput.Text"; 
    } 
} 

而这正是C#上的内容。

但是!!它并没有在这里结束。由于textblock没有显示任何内容,我拼命试图将一些普通字符串分配给TestText属性。像这样:

TestText = "HELLO WORLD"; 

但是,当应用程序启动并加载页面时,textblock不显示任何内容。我只是不明白我错过了什么,或者做错了什么。

如果有人能够让我知道数据绑定结构,或者至少可以解释我做错了什么,那么我可以自己弄清楚。

在此先感谢你们!

回答

0

您必须先分配DataContext,然后才能获得绑定效果。因此,只要文本框发生更改,就会将代码写入textchanged事件中。

this.DataContext=TestText 

而且多了一个,你需要执行的变化是,你实际上并没有设置property.It应该像

TestText=TestInput.Text

0

您结合我把简单的工作的理解example..just follow this .. 这是你的页面上的文本框的数据绑定到一些属性textboxText ..当你完成在这个文本框中写作。然后所有的书面文字自动进入这个属性。而且这个属性也绑定到了textbloack,所以当你的textbloack获得焦点时,它将得到属性的获取并自动填充它。

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> 
    <StackPanel Orientation="Horizontal" > 
     <TextBox x:Name="testTextbox" Height="50" Width="200" Text="{Binding TextboxText,Mode=TwoWay}" /> 
     <TextBlock x:Name="testTextblock" Height="50" Width="1000" Text="{Binding TextboxText,Mode=OneWay}" Foreground="White" /> 
    </StackPanel> 
</Grid> 

这是你page.cs类中,我还展示了如何实现inotifyproperty changed..it将帮助你在未来..

public sealed partial class MainPage : Page,INotifyPropertyChanged 
{ 
    public MainPage() 
    { 
     this.InitializeComponent(); 
     this.DataContext = this; 
    } 

    private string _TextboxText; 
    public string TextboxText 
    { 
     get 
     { 
      return _TextboxText; 
     } 
     set 
     { 
      _TextboxText = value; 

      FirePropertyChanged("TextboxText"); 
      testTextblock.UpdateLayout(); 

     } 
    } 


    protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    protected void FirePropertyChanged(string propertyName) 
    { 
     if (this.PropertyChanged != null) 
     { 
      this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 
+0

你为什么在InitializeComponent()上使用“this”关键字; ??? 真的有必要吗?我认为“this”是指当前的实例,我的意思是,“InitializeComponent();”之间的区别是什么?和这个。InitializeComponent();“我不明白 –

+0

它是一样的可能是我犯了错误.. – loop