我正在处理Silverlight应用程序,我想通过字符串类型的属性绑定textblock的简单文本属性。
我做的是:
<TextBlock Text="{Binding Name}"/>
代码背后:
public string Name{get;set;}
Name = "Testing..!";
但它不起作用。
答案 0 :(得分:2)
扩展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
的{{1}}的第一个祖先,并绑定到该对象上的Page
属性
最后请注意,如果您要更改Name
的值,还需要在INotifyPropertyChanged
对象上实施DataContext
。
哦,你应该使用视图模型作为Name
而不是DataContext
本身!
答案 1 :(得分:0)
回答你的问题是:Page_Loaded
事件集LayoutRoot.DataContext = this;
。但它比实践更糟糕。
您应该查看MVVM模式和INotifyPropertyChanged
并创建包含此属性的ViewModel。