2009-04-25 19 views
0

私はWindowArtistInfo)で、次のXAMLを持っている:WPF:依存関係プロパティに関する基本的な質問

<Grid> 
    <TextBlock Text="{Binding Artist.Name}"></TextBlock> 
</Grid> 

そして、これは(質問者のためために簡略化コード)同じウィンドウのコードビハインドであります:基本的に私は何をしようとしているデータは、依存関係プロパティに結合され

public static readonly DependencyProperty ArtistProperty = 
     DependencyProperty.Register("Artist", typeof(Artist), typeof(ArtistInfo)); 

Artist Artist { 
    get { 
     return (Artist)GetValue(ArtistProperty); 
    } 
    set { 
     SetValue(ArtistProperty, value); 
    } 
} 

public ArtistInfo() { 
    InitializeComponent(); 
} 
public ArtistInfo(int artistID) { 
    InitializeComponent(); 
    Artist = GetArtist(artistID); 
} 

Artistは(コンストラクタで)移植されるときに、TextBlockがで満たされますようにアーティストの名前。

私はここで何が欠けていますか?

答えて

4
<Window DataContext="{Binding RelativeSource={RelativeSource Self}}" ...> 
    <Grid> 
     <TextBlock Text="{Binding Artist.Name}"/> 
    </Grid> 
</Window> 
+0

+1 xamlケントでどのように行われたのか教えてくれてありがとう –

5

TextBlockのBindingソースを更新していたのは私だけでした。まず

<TextBlock Name="m_tb" ... /> 

が続い

public ArtistInfo() { 
... 
m_tb.DataContext = this; 
} 

EDIT OPが複数のTextBlockまたは子要素があるかもしれないことを述べたコンストラクタでDataContextの値を更新するのTextBlockに名前を追加します。

この場合、すべての値に最も近い親オブジェクトに対して上記のトリックを行います。この場合グリッドコントロール。 DataContextプロパティは、すべての内部の子どもが話すように継承されます。

+0

他のテキストブロック(アーティスト名、年齢など)がある場合、これらのTextBlockのすべてのDataContextを設定する必要がありますか? –

+1

@Dreasの場合は、親要素を選択してそこにDataContextを設定する必要があります。それは子要素によって "継承"されます – JaredPar

+0

優秀、素晴らしい作品!ヘルプJaredParに感謝します。 –

関連する問題