WPF: основной вопрос о свойствах зависимостей - PullRequest
0 голосов
/ 25 апреля 2009

У меня есть следующий Xaml в Window (ArtistInfo):

<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 заполнялось именем Исполнителя.

Что мне здесь не хватает?

Ответы [ 2 ]

5 голосов
/ 25 апреля 2009

Единственное, что я не видел, это то, что вы обновляли источник Binding для TextBlock. Сначала добавьте имя в TextBlock

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

Затем обновите значение DataContext в конструкторе

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

EDIT OP упомянул, что может быть более одного TextBlock или дочернего элемента.

В этом случае я бы проделал вышеуказанный трюк для ближайшего родительского объекта ко всем значениям. В этом случае Grid control. Свойство DataContext будет унаследовано, так сказать, всеми внутренними дочерними элементами.

4 голосов
/ 25 апреля 2009
<Window DataContext="{Binding RelativeSource={RelativeSource Self}}" ...>
    <Grid>
        <TextBlock Text="{Binding Artist.Name}"/>
    </Grid>
</Window>
...