Roy*_*Roy 1 c# xaml dependency-properties windows-phone-8.1
我的页面xaml:
<header:DefaultText x:Name="header" HeaderText="{Binding Resources.HeaderTitle}"/>
Run Code Online (Sandbox Code Playgroud)
我的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));
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我使用绑定设置HeaderText属性时,不会调用setter,但是当我使用没有绑定的普通字符串时,会调用它.
我已经尝试过类似问题的答案,例如:WPF Binding to variable/DependencyProperty
内部的XAML绑定不会调用您的Setter方法,而是直接设置依赖项属性的值,如MSDN所述:
在加载二进制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
}
Run Code Online (Sandbox Code Playgroud)