1

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

我所做的是:

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

后面的代码:

public string Name{get;set;}

Name = "Testing..!";

但它不起作用。

4

2 回答 2

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

这转化为:

TextBlock找到类型为的 的第一个祖先Page,并绑定到该Name对象的属性

最后一点,如果您要INotifyPropertyChanged更改.DataContextName

哦,你应该使用视图模型DataContext而不是Page它本身!

于 2012-06-23T16:31:30.047 回答
0

您的问题的答案是:在Page_Loadedevent setLayoutRoot.DataContext = this;中。但这更像是hack,而不是好的做法。

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

于 2012-06-23T15:00:38.493 回答