Silverlight 如何绑定文本块';使用属性通过XAML创建文本?

Silverlight 如何绑定文本块';使用属性通过XAML创建文本?,silverlight,xaml,binding,Silverlight,Xaml,Binding,我正在开发一个Silverlight应用程序,我想通过字符串类型的属性绑定textblock的简单文本属性 我所做的是: <TextBlock Text="{Binding Name}"/> 但它不会起作用。对您的问题的回答是:在页面中加载事件集LayoutRoot.DataContext=this。但这更多的是黑客行为,而不是良好的实践 您应该查看MVVM模式和INotifyPropertyChanged,并创建包含此属性的ViewModel。要扩展anatoliiG的答案(这将

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

我所做的是:

<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}" />