2009-04-25 4 views
0

У меня есть следующий код XAML в Window (ArtistInfo):WPF: Основной вопрос о Dependency Properties

<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); 
} 

в основном то, что я пытаюсь сделать, это привязка данных к Dependency собственности, так что, когда Artist заполняется (в конструкторе), то TextBlock наполняется имя художника.

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

ответ

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

+1 Спасибо, что показал, как это делается в xaml Kent –

5

Единственное, что я не видел, - это обновление источника привязки для TextBlock. Сначала добавьте имя в TextBlock

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

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

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

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

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

+0

, и если у меня есть другие текстовые блоки (например, фамилия исполнителя, возраст ...), мне нужно установить DataContext для всех этих текстовых блоков? –

+1

@Dreas, в этом случае вы должны выбрать родительский элемент и установить там DataContext. Он будет «унаследован» дочерними элементами – JaredPar

+0

Отлично, отлично работает! Спасибо за помощь JaredPar. –

Смежные вопросы