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

  1. 在解决方案资源管理器中右键单击Web项目并选择属性。
  2. 选择Web页签。
  3. 向下滚动到调试器部分
  4. 取消选中标有Silverlight的复选框。

PropertyChanged事件触发,但UI未更新

确保将数据上下文设置为包含属性的类的实例。

从它的外观来看,你正在这样做,但要确保你正在实现INotifyPropertyChanged

在调试时,如果发生任何绑定错误,这些错误将显示在输出窗口中。

如果你输入'hello'然后用'world'替换它,值会改变吗?如果是这样,可能只是大小写问题