读书人

关于INotifyPropertyChanged的有关问题

发布时间: 2013-11-14 22:02:51 作者: rapoo

关于INotifyPropertyChanged的问题


<TextBox Height="23" Name="textBox1" Width="120"
Text="{Binding MyProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged }"/>


public partial class MainWindow : Window
{
private classTest testClass = new classTest();

public MainWindow()
{
InitializeComponent();
textBox1.DataContext = testClass;
}
}

public class classTest : INotifyPropertyChanged
{
private String myVar;

public String MyProperty
{
get { return myVar; }
set
{
myVar = "123";
OnPropertyChanged(new PropertyChangedEventArgs("MyProperty"));
}
}

#region INotifyPropertyChanged Members

public event PropertyChangedEventHandler PropertyChanged;

protected void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (PropertyChanged != null)
{
PropertyChanged(this, e);
}
}

#endregion
}


如上代码TextBox绑定了MyProperty属性,想让TextBox每次不管他输入什么,我们都把TextBox.Text的值设置为"123"。
但是发现 OnPropertyChanged第一次通知成功并且更新界面后第二次以后的通知就没作用了。本次的value和上次的value相同OnPropertyChanged就不起作用吗?有什么办法解决呢?
[解决办法]
我测试了下你的代码。不存在这种问题啊。
输入数据后,每次 lostfocus 时,就又变成123了。可能这也是你说没有更新的地方吧。

具体你的使用场景不清楚。希望有所帮助
[解决办法]
这个问题有点意思,这个可能涉及到TextBox更底层的东西了,楼主的代码整体上没有什么问题,后台也进行了更新,没有反映到前台是不是涉及到优先级的问题,我们知道Text属性是跟TextBox的静态属性TextProperty相关联,赋值也是通过SetTextProperty这个函数,是不是被认为前台输入的优先级高于后台的执行?这个帮顶一下吧,看有没有大神~

读书人网 >CAD教程

热点推荐