0

我有这个代码部分:

<TextBlock 
      Margin="5,3,5,1" Foreground="White" 
      FontWeight="Bold" FontStyle="Italic" TextAlignment="Center"
      Text="{Binding AntennaName}"/>

在我的视图模型中:

private string antennaName;
public string AntennaName
{
    get { return antennaName; }
    set { antennaName = value; OnPropertyChanged("AntennaName"); }
}

我检查了,我可以确认在我的实际代码中AntennaName属性确实发生了变化,但文本块没有。

谁能解释为什么会这样?我对 mvvm 场景很陌生。

4

1 回答 1

1

尝试这个 -

<TextBlock Text="{Binding DataContext.AntennaName,
           RelativeSource={RelativeSource FindAncestor,
           AncestorType=UserControl}}"/>

某处的问题在于您DataContext为 UserControl 设置的方式。不知何故,textBlock 没有从其父级(用户控件)继承 DataContext。因此,明确要求它可能会起作用。

解释

UI 元素默认在其 DataContext 中搜索 Binding,除非明确指定要查看其他位置。

此外,如果您没有为控件设置 DataContext,它将从其父控件继承 DataContext 并在其中查找 Binding 属性。如果在父 DataContext 上也找不到绑定属性,绑定会静默失败,您将看到的只是空字符串。

您始终可以在输出窗口中查找绑定失败。如果您查看输出窗口,您将AntennaName在那里看到您的属性。

参考 -数据绑定概述

于 2012-11-13T10:05:25.230 回答