我有一个名为SongDescription的自定义用户控件:
<UserControl x:Class="DPTestAp.SongDescription" ...>
<Grid x:Name="LayoutRoot">
<DockPanel Height="50">
<TextBlock x:Name="title" Text="{Binding name}" Width="100" Height="30"/>
<TextBox x:Name="lyrics"/>
</DockPanel>
</Grid>
</UserControl>
我给它添加了一个DependencyProperty:
public partial class SongDescription : UserControl
{
public static readonly DependencyProperty SongProperty = DependencyProperty.Register("Song", typeof(Song), typeof(SongDescription));
public Song Song
{
get
{
return (Song)GetValue(SongProperty);
}
set
{
SetValue(SongProperty, value);
updateLyrics()
}
}
private void updateLyrics()
{
lyrics.Text = Song.lyrics;
}
public SongDescription()
{
InitializeComponent();
}
}
问题是:如何将某些内容绑定到这个SongProperty上? 我在我的主窗口中使用SongDescription,就像这样:
<local:SongDescription x:Name="songDescription" Song="{Binding DataContext}"/>
我无法让我的文本框歌词显示歌词。在主窗口中,我尝试将DataContext设置为songDescription,如下所示:
songDescription.DataContext = new Song() { name="Home", lyrics="Hold on, to me as we go" };
或者像这样针对窗口本身进行操作:
DataContext = new Song() { name="Home", lyrics="Hold on, to me as we go" };
我尝试将Song作为资源并将其绑定到SongProperty,代码如下:
:
<Window.Resources>
<local:Song x:Key="res" name="Home" lyrics="Hold on, to me as we go"/>
</Window.Resources>
<Grid>
<local:SongDescription x:Name="songDescription" Song="{StaticResource res}"/>
</Grid>
没有任何帮助。TextBlock title 可以很好地绑定歌曲名称,但我无法调用 updateLyrics() 方法。(在实际应用中,这个方法更为复杂,因此我不能像处理名称那样使用绑定)。
谢谢!
PropertyChanged
回调是共享函数,我将无法更新任何控件! - Hamed Zakery Miab