Silverlight PropertyChanged事件未在双向文本框绑定中触发
问题描述:
如果某个类属性是双向绑定到文本框的文本属性,那么当更改文本框中的文本时,该类的“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}"/>
答
感谢Boluc。这非常有帮助! – xyk 2013-04-07 11:54:45