gpt4 book ai didi

WPF 绑定(bind)到 UserControl 自定义 DependencyProperty

转载 作者:行者123 更新时间:2023-12-04 13:52:04 26 4
gpt4 key购买 nike

我有一个名为 SongDescription 的自定义 UserControl:

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

问题是:如何将一些东西绑定(bind)到这个 SongProperty?
我在主窗口中使用 SongDescription,如下所示:
<local:SongDescription x:Name="songDescription" Song="{Binding DataContext}"/>

我无法让我的 TextBox 歌词显示歌词。在主窗口中,我尝试将 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 成为资源并将其绑定(bind)到 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 标题很好地绑定(bind)了歌曲名称。但我不能调用 updateLyrics() 方法。 (在现实生活中这种方法比较复杂,所以我不能像 name 那样使用 Binding)。

谢谢!

最佳答案

是的,所以这是一个带有依赖属性的问题。您永远不会将验证代码放在访问器方法 (get/set) 中,因为 WPF 将依赖项属性存储在它自己管理的表中。这就是为什么您必须注册依赖属性的原因,它本质上是在此表上创建条目以存储与每个属性关联的值,并且当您使用“GetValue”/“SetValue”时,您正在更新此表上的条目(顺便说一下与 WPF 如何能够管理数据绑定(bind)有关)。

这样做的结果是 WPF 可以(并且将)完全绕过您的属性访问器,因为它可以直接访问真实数据。如果它可以直接访问数据,为什么还要使用你的访问器。相反,您需要实现一个“PropertyChanged”回调函数或一些 WPF 认可的验证方法,但永远不要在您的访问器中这样做。

看:

http://msdn.microsoft.com/en-us/library/ms752914.aspx

关于WPF 绑定(bind)到 UserControl 自定义 DependencyProperty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14711274/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com