0

WindowArtistInfo)に次のXamlがあります。

<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

2 に答える 2

5

私が見なかったのは、TextBlockのBindingソースを更新したことだけでした。まず、TextBlockに名前を追加します

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

次に、コンストラクターでDataContext値を更新します

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

EDIT OPは、複数のTextBlockまたは子要素が存在する可能性があると述べました。

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

于 2009-04-25T15:08:43.770 に答える
4
<Window DataContext="{Binding RelativeSource={RelativeSource Self}}" ...>
    <Grid>
        <TextBlock Text="{Binding Artist.Name}"/>
    </Grid>
</Window>
于 2009-04-25T15:15:31.773 に答える