2009-10-29 48 views
7

我試圖通過將視圖模型的模型到代碼後面,結合DataContext的「本」,以簡化一些代碼,但它似乎不同的工作,下面的例子:爲什麼OnPropertyChanged在代碼隱藏中不起作用?

爲什麼當按鈕單擊,即使調用OnPropertyChanged(「消息」),綁定到「消息」的TextBlock不會更改?

XAML:

<Window x:Class="TestSimple223.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300"> 
    <StackPanel HorizontalAlignment="Left"> 
     <Button Content="Button" 
       Click="button1_Click" /> 
     <TextBlock 
      Text="{Binding Path=Message, Mode=TwoWay}"/> 
     <TextBlock 
      x:Name="Message2"/> 
    </StackPanel> 
</Window> 

代碼背後:

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 


    } 
} 

回答

17

您沒有標明類爲可用於屬性更改通知。僅僅因爲你實現這些方法並不意味着WPF知道,一類支持更改通知的標題更改爲

public partial class Window1 : Window, INotifyPropertyChanged 

- 你需要通過INotifyPropertyChanged的標記它告訴它。這樣,綁定機制就可以將您的課程識別爲潛在的更新目標。

相關問題