【问题标题】:How to bind a textblock's text through XAML using a property?如何使用属性通过 XAML 绑定文本块的文本?
【发布时间】:2012-06-23 14:25:55
【问题描述】:

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

我所做的是:

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

后面的代码:

public string Name{get;set;}

Name = "Testing..!";

但它不会起作用。

【问题讨论】:

    标签: silverlight xaml binding


    【解决方案1】:

    扩展 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 属性

    最后一点,如果您要更改 Name 的值,您还需要在您的 DataContext 对象上实现 INotifyPropertyChanged

    哦,您应该使用视图模型作为DataContext 而不是Page 本身!

    【讨论】:

      【解决方案2】:

      您的问题的答案是:在Page_Loaded 事件集LayoutRoot.DataContext = this;。但这更像是 hack,而不是好的做法。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-07
        • 1970-01-01
        • 1970-01-01
        • 2019-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多