如何使用属性通过XAML绑定文本块的文本?

时间:2012-06-23 14:25:56

标签: silverlight xaml binding

我正在处理Silverlight应用程序,我想通过字符串类型的属性绑定textblock的简单文本属性。

我做的是:

<TextBlock Text="{Binding Name}"/>

代码背后:

public string Name{get;set;}

Name = "Testing..!";

但它不起作用。

2 个答案:

答案 0 :(得分:2)

扩展anatoliiG的答案(可行):数据绑定是指默认情况下当前元素的DataContext属性的属性。这意味着你的

<TextBlock Text="{Binding Name}" />

实际上已翻译为

  

Text属性的值设置为this.DataContext.Name

DataContext是继承的,所以如果没有在TextBlock上明确设置,它将检查父级,然后是父级的父级等等)

您可以通过以下两种方式之一解决问题:

  1. 您可以将父级this.DataContext的值设置为父级本身(如anatoliiG所示)。这意味着当它查找this.DataContext.Name时,它会检查Page本身,这是找到Name属性的位置。

  2. 您可以更改Binding,以便在查找绑定时查看Page而不是Page.DataContext。您可以使用RelativeSource标记扩展名来实现此目的:

  3. 这转换为:

      

    找到类型为TextBlock的{​​{1}}的第一个祖先,并绑定到该对象上的Page属性

    最后请注意,如果您要更改Name的值,还需要在INotifyPropertyChanged对象上实施DataContext

    哦,你应该使用视图模型作为Name而不是DataContext本身!

答案 1 :(得分:0)

回答你的问题是:Page_Loaded事件集LayoutRoot.DataContext = this;。但它比实践更糟糕。

您应该查看MVVM模式和INotifyPropertyChanged并创建包含此属性的ViewModel。