为什么OnPropertyChanged在Code Behind中不起作用?

我试图通过将ViewModel模型放在后面的代码中并将DataContext绑定为“this”来简化一些代码,但它似乎工作方式不同,在下面的示例中:

为什么在单击按钮时,绑定到“Message”的TextBlock不会更改,即使调用了OnPropertyChanged(“Message”)?

XAML:

  

代码背后:

 using System.Windows; using System.ComponentModel; namespace TestSimple223 { public partial class Window1 : Window { #region ViewModelProperty: Message private string _message; public string Message { get { return _message; } set { _message = value; OnPropertyChanged("Message"); } } #endregion public Window1() { InitializeComponent(); DataContext = this; Message = "original message"; Message2.Text = "original message2"; } private void button1_Click(object sender, RoutedEventArgs e) { Message = "button was clicked, message changed"; Message2.Text = "button was click, message2 changed"; } #region INotify public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } #endregion } } 

您尚未将类标记为可用于更改属性通知。 将标题更改为

 public partial class Window1 : Window, INotifyPropertyChanged 

仅仅因为你实现这些方法并不意味着WPF知道一个类支持更改通知 – 你需要通过用INotifyPropertyChanged标记它来告诉它。 这样,绑定机制可以将您的类标识为潜在的更新目标。