我似乎无法使用 INotifyPropertyChanged 获取 WPF ControlTemplate 绑定以更新常规 getter 属性。请参阅下面的示例。
我有以下 C# WPF 类:
public class ExampleControl : Control, INotifyPropertyChanged
{
public static readonly DependencyProperty NumberProperty =
DependencyProperty.Register("Number", typeof(int),
typeof(ExampleControl), new PropertyMetadata(0));
public int Number
{
get { return (int)GetValue(NumberProperty); }
set
{
SetValue(NumberProperty, value);
OnPropertyChanged(nameof(Text));
}
}
public string Text
{
get
{
return (Number * 2).ToString();
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
我正在使用包含 ControlTemplate 的样式:
<Style TargetType="local:ExampleControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:ExampleControl">
<TextBlock Text="{Binding Text, RelativeSource={RelativeSourceAncestorType=local:ExampleControl}}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
第一次加载控件时它确实有效(因此绑定有效)。但是,当 ExampleControl 的“Number”属性更新时,ControlTemplate 中的 TextBlock 不会相应更新。我确实希望 Text 属性基于 Number DependencyProperty 的值。我需要做什么才能做到这一点?