WPF - 绑定到自定义用户控件的依赖项属性不起作用



我目前正在处理一个MVVM项目,该项目使用窗口(使用我的ViewModel(和我自己的UserControl。UserControl 在 .xaml 文件中几乎为空,因为它的所有功能都来自代码隐藏,它绘制不同的形状。我想将 ViewModel 中的属性绑定到 UserControl 中的 DependencyProperty,但无论我做什么,我都无法让它工作。我在这里和不同的网站上阅读了大量的答案,并注意到这可能是UserControl的DataContext的问题,但我最终还是没能解决这个问题。我在视图模型中引发 PropertyChanged 事件的方式是正确的。我可以成功地将我的属性绑定到其他控件(如文本框等(,但不能绑定到我的控件。如果您能向我解释为什么它不起作用以及如何解决这个问题,我将不胜感激。问候!

MainWindow.xaml 绑定:

<Grid Margin="10">
<local:FretboardControl Grid.Row="0" Fretboard="{Binding CurrentFretboard, Mode=TwoWay}"/>
</Grid>

指板控制.xaml:

<UserControl ...>
<Grid>
<TextBlock Text="{Binding Path=Fretboard, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:FretboardControl}}"/>
//the TextBlock above is just a test
<Canvas.../>
</Grid>
</UserControl>

FretboardControl.xaml.cs(代码隐藏(:

public static readonly DependencyProperty FretboardProperty = DependencyProperty.Register
(nameof(Fretboard), typeof(Fretboard), typeof(FretboardControl), new PropertyMetadata(new Fretboard(), PropertyChangedCallback));
public Fretboard Fretboard {
get {
return GetValue(FretboardProperty) as Fretboard;
}
set {
SetValue(FretboardProperty, value);
}
}
protected static void PropertyChangedCallback(DependencyObject o, DependencyPropertyChangedEventArgs e) {
//breakpoint here. It is reached only once during runtime:
//at start, when the default value is inserted
if (o is FretboardControl) {
(o as FretboardControl).RefreshFretboard();
}
}

好的,所以显然我可能找到了我问题的种子。我的 CurrentFretboard setter 引发了 PropertyChanged 事件,但我没有更改对象本身的引用。对象已修改,但它仍然是同一对象。我认为这无关紧要,无论如何它都会发送到绑定,但看起来只有在引用被更改时才调用 PropertyChangedCallback。我想我可以替换每个集合上的引用,或者只是侦听用户控件中已有的 PropertyChanged 事件。感谢您的帮助!

相关内容

  • 没有找到相关文章

最新更新