PropertyChanged事件触发,但UI未更新
本文关键字:UI 更新 事件 PropertyChanged | 更新日期: 2023-09-27 18:13:49
public string TenNguoiDung
{
get { return _currentNguoiDung.TenNguoiDung; }
set
{
_currentNguoiDung.TenNguoiDung = value != null
? value.ToStandardString(true) : string.Empty;
SendPropertyChanged("TenNguoiDung");
ValidProperty(_currentNguoiDung.TenNguoiDung, new
ValidationContext(_currentNguoiDung) { MemberName = "TenNguoiDung" });
}
}
public static string ToStandardString(this string value,
bool isAllStartWithUpper = false)
{
string result = string.Empty;
value = value.Trim();
var listWord = value.Split(' ').ToList();
listWord.RemoveAll(p => p == string.Empty);
foreach (var item in listWord) result +=
item.Substring(0, 1).ToUpper() + item.Substring(1).ToLower() + " ";
if (!isAllStartWithUpper) result =
result.Substring(0, 1) + result.Substring(1).ToLower();
return result.Trim();
}
我有一个文本框:
<TextBox Grid.Column="1" Margin="1" Text=
"{Binding Path=TenNguoiDung,Mode=TwoWay,NotifyOnValidationError=True}"/>
当我输入一些明确的文本标准,Setter调用SendPropertyChanged("TenNguoiDung"),但在UI不更新。我怎么能解决这个问题?
编辑:public void SendPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
编辑:我调试在Setter,我看到_currentNguoiDung。TenNguoiDung在之后更改为standardstring ,但UI未更新
我花了几个小时在谷歌上搜索,得到了答案。当这个bug只发生在调试模式时,我感到很高兴。当我运行应用程序没有调试,它工作完美!!
修复调试模式:[link]在Silverlight 5
- 在解决方案资源管理器中右键单击Web项目并选择属性。
- 选择Web页签。
- 向下滚动到调试器部分
- 取消选中标有Silverlight的复选框。
确保将数据上下文设置为包含属性的类的实例。
从它的外观来看,你正在这样做,但要确保你正在实现INotifyPropertyChanged
在调试时,如果发生任何绑定错误,这些错误将显示在输出窗口中。
如果你输入'hello'然后用'world'替换它,值会改变吗?如果是这样,可能只是大小写问题