私は Silverlight アプリケーションで作業しており、文字列型のプロパティを介して textblock の単純なテキスト プロパティをバインドしたいと考えています。
私がしたことは:
<TextBlock Text="{Binding Name}"/>
コードビハインド:
public string Name{get;set;}
Name = "Testing..!";
しかし、それはうまくいきません。
私は Silverlight アプリケーションで作業しており、文字列型のプロパティを介して textblock の単純なテキスト プロパティをバインドしたいと考えています。
私がしたことは:
<TextBlock Text="{Binding Name}"/>
コードビハインド:
public string Name{get;set;}
Name = "Testing..!";
しかし、それはうまくいきません。
anatoliiG の回答を拡張するには (これは機能します): データ バインディングはDataContext、既定で現在の要素のプロパティのプロパティを参照します。これは、あなたの
<TextBlock Text="{Binding Name}" />
実際に翻訳される
Textプロパティの値をthis.DataContext.Name
(DataContextは継承されるため、明示的に設定されていない場合はTextBlock、親をチェックし、次に親の親などをチェックします)
次の 2 つの方法のいずれかで問題を解決できます。
親の値をthis.DataContext親自体に設定できます (anatoliiG が示唆するように)。これは、ルックアップ時に、プロパティが見つかった場所である自体をthis.DataContext.Nameチェックすることを意味します。PageName
バインディングを検索するときではなく、 をBinding検索するように変更できます。これは、マークアップ拡張機能を使用して実現できます。PagePage.DataContextRelativeSource
これは次のように変換されます。
TextBlock型の の最初の祖先を見つけ、そのオブジェクトのプロパティにPageバインドしますName
最後に、 の値を変更する場合は、オブジェクトINotifyPropertyChangedにも実装する必要があります。DataContextName
ああ、ビュー モデルを自体ではなくとして使用する必要があります。DataContextPage
あなたの質問への答えは: in Page_Loadedevent setLayoutRoot.DataContext = this;です。しかし、それは良い習慣というよりハックです。
MVVM パターンを調べてINotifyPropertyChanged、このプロパティを含む ViewModel を作成する必要があります。