WPF绑定视图数据无法正确更新

时间:2012-11-13 09:53:12

标签: c# wpf mvvm binding

我有这个代码部分:

<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场景很陌生。

1 个答案:

答案 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

参考 - Data Binding Overview