在自定义控件的 ControlTemplate 中绑定不更新(INotifyPropertyChanged)

问题描述 投票:0回答:0

我似乎无法使用 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 的值。我需要做什么才能做到这一点?

c# wpf data-binding inotifypropertychanged controltemplate
© www.soinside.com 2019 - 2024. All rights reserved.