PropertyChanged事件触发但UI未更新

时间:2014-07-20 14:25:50

标签: c# wpf silverlight

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:

 <TextBox Grid.Column="1" Margin="1" Text=
 "{Binding Path=TenNguoiDung,Mode=TwoWay,NotifyOnValidationError=True}"/>

当我向Standard键入一些明文时,Setter调用了SendPropertyChanged(“TenNguoiDung”)但在UI上没有更新。我该如何解决?

修改:

public void SendPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }

修改

我在 Setter 进行了调查,我看到_currentNguoiDung.TenNguoiDung在 ToStandardString 之后发生了变化,但在UI上没有更新

更新 我花了几个小时去谷歌,我得到了答案。 当这个bug只发生在调试模式时,我感到很高兴。当我在没有调试的情况下运行应用程序时,它工作得很好!!

修复调试模式: [链接] Coerce Value in Property Setter - Silverlight 5

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

1 个答案:

答案 0 :(得分:1)

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

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

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

如果您键入&#39; hello&#39;值是否会发生变化然后将其替换为“世界”#?如果是这样,可能只是一个区分大小写的问题