我正在开发一个 Silverlight 应用程序,我想通过字符串类型的属性绑定 textblock 的简单文本属性。
我所做的是:
<TextBlock Text="{Binding Name}"/>
后面的代码:
public string Name{get;set;}
Name = "Testing..!";
但它不起作用。
我正在开发一个 Silverlight 应用程序,我想通过字符串类型的属性绑定 textblock 的简单文本属性。
我所做的是:
<TextBlock Text="{Binding Name}"/>
后面的代码:
public string Name{get;set;}
Name = "Testing..!";
但它不起作用。
扩展 anatoliiG 的答案(这将起作用):默认情况下,数据绑定是指DataContext
当前元素属性上的属性。这意味着您的
<TextBlock Text="{Binding Name}" />
实际上被翻译成
将
Text
属性值设置为this.DataContext.Name
(DataContext
是继承的,所以如果它没有明确设置TextBlock
它会检查父级,然后是父级的父级等)
您可以通过以下两种方式之一解决您的问题:
您可以将父级this.DataContext
上的值设置为父级本身(如 anatoliiG 建议的那样)。这意味着当它查找时this.DataContext.Name
,它将检查Page
自身,即您的Name
财产所在的位置。
您可以更改您的Binding
,以便它在查找绑定时查看Page
而不是。您可以使用标记扩展Page.DataContext
来实现此目的:RelativeSource
这转化为:
TextBlock
找到类型为的 的第一个祖先Page
,并绑定到该Name
对象的属性
最后一点,如果您要INotifyPropertyChanged
更改.DataContext
Name
哦,你应该使用视图模型DataContext
而不是Page
它本身!
您的问题的答案是:在Page_Loaded
event setLayoutRoot.DataContext = this;
中。但这更像是hack,而不是好的做法。
您应该查看 MVVM 模式INotifyPropertyChanged
并创建包含此属性的 ViewModel。