2009-04-25 60 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将填充Artist的名称。

我在这里缺少什么?

回答

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

+1感谢您展示xaml Kent如何完成它 – 2009-04-25 15:19:31

5

我没有看到的唯一的事情是你更新TextBlock的绑定源。首先添加一个名字到TextBlock

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

然后在构造函数中

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

编辑 OP提到,可能有不止一个的TextBlock或子元素更新的DataContext值。

在这种情况下,我会对最接近所有值的父对象执行上述技巧。在这种情况下,网格控件。 DataContext属性将被所有内部孩子继承。

+0

如果我有其他文本块(如艺术家姓氏,年龄...),我必须设置所有这些TextBlocks的DataContext? – 2009-04-25 15:11:03

+1

@Dreas,在这种情况下,你应该选择一个父元素并在那里设置DataContext。它会被子元素“继承” – JaredPar 2009-04-25 15:11:55

+0

非常棒,效果很棒!感谢JaredPar的帮助。 – 2009-04-25 15:14:09