2013-04-05 2 views
0

Если свойство класса имеет двустороннюю привязку к текстовому свойству текстового поля, когда я изменяю текст в текстовом поле, это событие «PropertyChanged» класса должен был стрелять? Это не в моем случае - окно сообщения никогда не появляется, когда я изменяю содержимое текстового поля. Однако привязка работает, если свойства изменяют изменение текстового поля и наоборот.Событие Silverlight PropertyChanged не срабатывает при двусторонней привязке текстового поля

Редактировать: Теперь я понимаю, что он срабатывает, но только тогда, когда текстовое поле теряет фокус. Я предполагаю, что это должно быть причиной такого поведения.

Код:

public class BaselineAreas : INotifyPropertyChanged 
    { 
     public event PropertyChangedEventHandler PropertyChanged; 
     private double _Impervious = 0; 
     public double Impervious 
     { 
      get { return _Impervious; } 
      set 
      { 
       if (value != this._Impervious) 
       { 
        _Impervious = value; 
        NotifyPropertyChanged("Impervious"); 
       } 
      } 
     } 
     private double _Pervious = 0; 
     public double Pervious 
     { 
      get { return _Pervious; } 
      set 
      { 
       if (value != this._Pervious) 
       { 
        _Pervious = value; 
        NotifyPropertyChanged("Pervious"); 
       } 
      } 
     } 
     public void NotifyPropertyChanged(string propertyName) 
     { 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
      } 
     } 
    } 

    private BaselineAreas baselineAreas = new BaselineAreas(); 

    public MainPage() 
    { 
     InitializeComponent(); 

     baselineAreas.Impervious = 100; 
     baselineAreas.Pervious = 500; 
     textBoxTotalImperviousArea.DataContext = baselineAreas; 
     textBoxTotalPerviousArea.DataContext = baselineAreas; 
     baselineAreas.PropertyChanged += new PropertyChangedEventHandler(baselineAreas_PropertyChanged); 
    } 

    void baselineAreas_PropertyChanged(object sender, PropertyChangedEventArgs e) 
    { 
     MessageBox.Show(baselineAreas.Impervious.ToString()); 
    } 

Xaml:

   <TextBox Height="23" HorizontalAlignment="Left" Margin="138,16,0,0" Name="textBoxTotalImperviousArea" VerticalAlignment="Top" Width="62" 
         Text="{Binding Impervious, Mode=TwoWay}"/> 
       <TextBox Height="23" HorizontalAlignment="Right" Margin="0,45,226,0" Name="textBoxTotalPerviousArea" VerticalAlignment="Top" Width="62" 
         Text="{Binding Pervious, Mode=TwoWay}"/> 

ответ

Смежные вопросы