2009-10-29 4 views
7

मैं ViewModel मॉडल कोड में पीछे के रूप में "इस" DataContext डालने और बाध्यकारी द्वारा कुछ कोड को आसान बनाने की कोशिश कर रहा हूँ, लेकिन यह, अलग तरह से काम करने के लिए निम्न उदाहरण में लगता है:ऑनप्रॉपर्टी ने कोड के पीछे कोड में काम क्यों नहीं किया?

यह जब क्यों है बटन क्लिक किया गया है, "संदेश" से जुड़ा टेक्स्टब्लॉक नहीं बदलता है, भले ही OnPropertyChanged ("message") कहा जाता है?

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 के साथ चिह्नित करके यह बताने के लिए की जरूरत है। इस तरह, बाध्यकारी तंत्र आपकी कक्षा को एक संभावित अद्यतन लक्ष्य के रूप में पहचान सकता है।

संबंधित मुद्दे