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はその親(UserControl)からDataContextを継承していません。したがって、明示的に要求することは機能する可能性があります。

説明

UI要素は、他の場所を調べるように明示的に指定されていない限り、デフォルトでDataContextでBindingを検索します。

また、コントロールにDataContextを設定していない場合は、親コントロールからDataContextを継承し、その中のBindingプロパティを探します。親DataContextにもバインディングプロパティが見つからない場合、バインディングはサイレントに失敗し、表示されるのは空の文字列だけです。

出力ウィンドウでバインドの失敗をいつでも探すことができます。出力ウィンドウを見ると、向こうにあなたの物件AntennaNameがあります。

参照-データバインディングの概要

于 2012-11-13T10:05:25.230 に答える