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
答案 0 :(得分:1)
确保将数据上下文设置为包含属性的类的实例。
从它的外观来看,你这样做但确保你正在实施INotifyPropertyChanged
调试时如果发生任何绑定错误,这些错误将显示在输出窗口中。
如果您键入&#39; hello&#39;值是否会发生变化然后将其替换为“世界”#?如果是这样,可能只是一个区分大小写的问题