C#customcontrol无法更新,但触发了OnPropertyChanged

时间:2018-07-10 14:57:41

标签: c# data-binding wpf-controls

///这是我的CustomControl的代码

  

我不知道为什么更改了属性文本并成功触发了OnPropertyChange(“ Text”),但是在主窗口中,它具有一个名为Mystatusbar的自定义控件,该自定义控件中的文本无法更新并保持黑色背景(我设置为它)

namespace ExternalControl
{

    public partial class MyStatusBar : UserControl, INotifyPropertyChanged
    {
        public MyStatusBar()
        {
            InitializeComponent();
        }

        private string text = "状态栏";

        public event PropertyChangedEventHandler PropertyChanged;

        /// <summary>
        /// 状态栏显示的Text的入口
        /// </summary>
        public string Text
        {
            get
            {
                return text;
            }
            set
            {
                this.text = value;
                OnPropertyChanged("Text");
            }
        }

        private void OnPropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler propertyChangedEvent = PropertyChanged;
            if (propertyChangedEvent != null)
            {
                propertyChangedEvent(this, new 
                   PropertyChangedEventArgs(propertyName));
            }
        }

        private void _StatusBar_MouseEnter(object sender, MouseEventArgs e)
        {
            Text=DateTime.Now.ToLongTimeString();
        }

        private void UserControl_MouseEnter(object sender, MouseEventArgs e)
        {
            Text=DateTime.Now.ToLongTimeString();
        }
    }
}




        //here is my mainwindow code behind
    public partial class MainWindow : Window
    {        
        public MainWindow()
        {
            InitializeComponent();
        }        
    }

2 个答案:

答案 0 :(得分:0)

INotifyPropertyChanged不属于您的自定义控件。它属于您的(视图)模型。

对于具有要绑定到的属性的自定义控件,请使用custom Dependency Property

答案 1 :(得分:0)

Kwinten是正确的。 另一方面,如果您只是想使其工作,请尝试使用以下代码编辑用户控件构造函数:

public MyStatusBar()
{
    InitializeComponent();
    DataContext = this;
}