1

私は Silverlight アプリケーションで作業しており、文字列型のプロパティを介して textblock の単純なテキスト プロパティをバインドしたいと考えています。

私がしたことは:

<TextBlock Text="{Binding Name}"/>

コードビハインド:

public string Name{get;set;}

Name = "Testing..!";

しかし、それはうまくいきません。

4

2 に答える 2

2

anatoliiG の回答を拡張するには (これは機能します): データ バインディングはDataContext、既定で現在の要素のプロパティのプロパティを参照します。これは、あなたの

<TextBlock Text="{Binding Name}" />

実際に翻訳される

Textプロパティの値をthis.DataContext.Name

(DataContextは継承されるため、明示的に設定されていない場合はTextBlock、親をチェックし、次に親の親などをチェックします)

次の 2 つの方法のいずれかで問題を解決できます。

  1. 親の値をthis.DataContext親自体に設定できます (anatoliiG が示唆するように)。これは、ルックアップ時に、プロパティが見つかった場所である自体をthis.DataContext.Nameチェックすることを意味します。PageName

  2. バインディングを検索するときではなく、 をBinding検索するように変更できます。これは、マークアップ拡張機能を使用して実現できます。PagePage.DataContextRelativeSource

これは次のように変換されます。

TextBlock型の の最初の祖先を見つけ、そのオブジェクトのプロパティにPageバインドしますName

最後に、 の値を変更する場合は、オブジェクトINotifyPropertyChangedにも実装する必要があります。DataContextName

ああ、ビュー モデルを自体ではなくとして使用する必要があります。DataContextPage

于 2012-06-23T16:31:30.047 に答える
0

あなたの質問への答えは: in Page_Loadedevent setLayoutRoot.DataContext = this;です。しかし、それは良い習慣というよりハックです。

MVVM パターンを調べてINotifyPropertyChanged、このプロパティを含む ViewModel を作成する必要があります。

于 2012-06-23T15:00:38.493 に答える