使用值绑定分配的依赖项属性不起作用
我有一个带有依赖项属性的usercontrol。
public sealed partial class PenMenu : UserControl, INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } public bool ExpandCollapse { get { return false; } set { //code } } public static readonly DependencyProperty ExpandCollapseProperty = DependencyProperty.Register("ExpandCollapse", typeof(bool), typeof(PenMenu), null); //some more code }
我在XAML页面中赋值为:
但它没有在usercontrol中击中ExpandCollapse属性的GET-SET部分。 所以我添加bool到bool转换器只是为了检查通过绑定传递的值如下:
在转换器中使用断点,我看到传递的值是正确的。 它没有分配给依赖属性的可能原因是什么?
如果我说:在XAML页面中:
然后它命中usercontrol中的ExpandCollapse属性的GET-SET部分。 我被卡住了。 这很奇怪。 请帮忙。
令人沮丧的不是吗? 首先,包括已更改的事件处理程序。 像这样:
public string Title { get { return (string)GetValue(TitleProperty); } set { SetValue(TitleProperty, value); } } public static readonly DependencyProperty TitleProperty = DependencyProperty.Register("Title", typeof(string), typeof(MyControl), new PropertyMetadata(string.Empty, Changed)); private static void Changed(DependencyObject d, DependencyPropertyChangedEventArgs e) { var c = d as MyControl; // now, do something }
然后,请阅读这篇文章,以便您看到有更多的陷阱,而不仅仅是那个: http : //blog.jerrynixon.com/2013/07/solved-two-way-binding-inside-user.html
祝你好运!
不保证依赖属性的getter和setter可以运行,特别是WPF绑定引擎/ XAML处理器被记录为绕过这些。 看看MSDN – getter / setter应该只是DependencyProperty
本身的GetValue
/ SetValue
的包装器。
当您可以对新值执行操作时,应该在原始调用DependencyProperty.Register
添加属性更改处理程序,而不是在属性的setter中作出反应。
(见其他 问题 )。