私は 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
チェックすることを意味します。Page
Name
バインディングを検索するときではなく、 をBinding
検索するように変更できます。これは、マークアップ拡張機能を使用して実現できます。Page
Page.DataContext
RelativeSource
これは次のように変換されます。
TextBlock
型の の最初の祖先を見つけ、そのオブジェクトのプロパティにPage
バインドしますName
最後に、 の値を変更する場合は、オブジェクトINotifyPropertyChanged
にも実装する必要があります。DataContext
Name
ああ、ビュー モデルを自体ではなくとして使用する必要があります。DataContext
Page
あなたの質問への答えは: in Page_Loaded
event setLayoutRoot.DataContext = this;
です。しかし、それは良い習慣というよりハックです。
MVVM パターンを調べてINotifyPropertyChanged
、このプロパティを含む ViewModel を作成する必要があります。