Silverlight 如何绑定文本块';使用属性通过XAML创建文本?
我正在开发一个Silverlight应用程序,我想通过字符串类型的属性绑定textblock的简单文本属性 我所做的是:Silverlight 如何绑定文本块';使用属性通过XAML创建文本?,silverlight,xaml,binding,Silverlight,Xaml,Binding,我正在开发一个Silverlight应用程序,我想通过字符串类型的属性绑定textblock的简单文本属性 我所做的是: <TextBlock Text="{Binding Name}"/> 但它不会起作用。对您的问题的回答是:在页面中加载事件集LayoutRoot.DataContext=this。但这更多的是黑客行为,而不是良好的实践 您应该查看MVVM模式和INotifyPropertyChanged,并创建包含此属性的ViewModel。要扩展anatoliiG的答案(这将
<TextBlock Text="{Binding Name}"/>
但它不会起作用。对您的问题的回答是:在
页面中加载
事件集LayoutRoot.DataContext=this代码>。但这更多的是黑客行为,而不是良好的实践
您应该查看MVVM模式和INotifyPropertyChanged,并创建包含此属性的ViewModel。要扩展anatoliiG的答案(这将起作用):默认情况下,数据绑定引用当前元素的DataContext
属性。这意味着你的
<TextBlock Text="{Binding Name}" />
实际上是翻译成
将Text
属性的值设置为this.DataContext.Name
(DataContext
是继承的,因此如果未在TextBlock
上显式设置,它将检查父项,然后检查父项的父项等)
您可以通过以下两种方式之一解决问题:
您可以将父对象上的this.DataContext
的值设置为父对象本身(正如anatoliiG所建议的)。这意味着,当它查找This.DataContext.Name
时,它将检查页面本身,在那里可以找到Name
属性
您可以更改绑定
,以便它在查找绑定时查看页面
,而不是页面.DataContext
。您可以使用相对资源
标记扩展来实现这一点:
这意味着:
查找文本块
类型为页面
的第一个祖先,并绑定到该对象上的名称
属性
最后,如果要更改Name
的值,还需要在DataContext
对象上实现INotifyPropertyChanged
哦,您应该使用视图模型作为DataContext
而不是页面本身
<TextBlock Text="{Binding Name}" />