我有这个代码部分:
<TextBlock
Margin="5,3,5,1" Foreground="White"
FontWeight="Bold" FontStyle="Italic" TextAlignment="Center"
Text="{Binding AntennaName}"/>
并在我的viewmodel中:
private string antennaName;
public string AntennaName
{
get { return antennaName; }
set { antennaName = value; OnPropertyChanged("AntennaName"); }
}
我检查过,我可以确认,在我的实际代码中,AntennaName
属性确实发生了变化,但文本块却没有。
任何人都可以解释为什么会发生这种情况?我对mvvm场景很陌生。
答案 0 :(得分:1)
试试这个 -
<TextBlock Text="{Binding DataContext.AntennaName,
RelativeSource={RelativeSource FindAncestor,
AncestorType=UserControl}}"/>
问题在于您为UserControl设置DataContext
的方式。不知何故,textBlock不从其父(UserControl)继承DataContext。因此,明确要求它可能会有效。
<强>解释强>
默认情况下,UI元素在其DataContext中搜索Binding,除非明确指定查看其他位置。
此外,如果您没有为控件设置DataContext,它将从其父Control继承DataContext并在其中查找Binding属性。如果在父DataContext上找不到绑定属性,绑定将无提示失败,您将看到的只是空字符串。
您始终可以在输出窗口中查找绑定失败。如果您查看输出窗口,您会在那里看到您的属性AntennaName
。