繁体   English   中英

绑定到用户控件的DependencyProperty不会调用setter

[英]Binding to a usercontrol's DependencyProperty is not calling the setter

我的页面xaml:

<header:DefaultText x:Name="header" HeaderText="{Binding Resources.HeaderTitle}"/>

我的DefaultText.cs DependencyProperty:

    public string HeaderText
    {
        get { return (string)GetValue(HeaderTextProperty); }
        set
        {   //This part is never called when binding, but it is with static text
            SetValue(HeaderTextProperty, value);
            SetText(value);
        }
    }

    public readonly DependencyProperty HeaderTextProperty = DependencyProperty.Register("HeaderText", typeof(string), typeof(DefaultText), new PropertyMetadata(string.Empty));

我的问题是,当我使用绑定设置HeaderText属性时,不会调用setter,但是当我使用不绑定的普通字符串时,会调用它。

我已经尝试过类似问题的答案,例如: WPF绑定到变量/ DependencyProperty

MSDN所指出的那样内部XAML绑定不会调用您的Setter方法,而是直接设置依赖项属性的值:

当加载二进制XAML并处理作为依赖项属性的属性时,WPF XAML处理器将属性系统方法用于依赖项属性。 这有效地绕过了属性包装器。 在实现自定义依赖项属性时,必须解决此问题,并且应避免将除属性系统方法GetValue和SetValue之外的任何其他代码放在属性包装器中。

您需要做的是注册一个回调方法,该方法在依赖项属性更改时将触发:

public static DependencyProperty HeaderTextProperty = DependencyProperty.Register(
    "HeaderText", 
    typeof(string), 
    typeof(DefaultText), 
    new PropertyMetadata(string.Empty, PropertyChangedCallback)
);

private static void PropertyChangedCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs args)
{
    // this is the method that is called whenever the dependency property's value has changed
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM