我有一个TextBox。在set和get中我根据我的逻辑修改了文本框值。但是关于修改的UI没有更新。
<TextBox
Width="185"
Name="TextBoxNumber"
VerticalAlignment="Center"
HorizontalAlignment="Left"
BorderThickness="0"
Margin="5, 4, 0, 2"
Text="{Binding Path=OmukText, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
</TextBox>
这是set和get
private string _omukText = string.Empty;
public string OmukText
{
get
{
return this._omukText;
}
set
{
if(value.Equals(" "))
{
_omukText = string.Empty;
}
if (value.Length > 4 && !value.Contains(" "))
{
this._omukText = value.Insert(4, " ");
}
else
{
this._omukText = value.Trim();
}
this.OnPropertyChanged("OmukText");
}
}
假设,用户在TextBox中放置一个空格,根据我的setter,该值应设置为空字符串。但实际上字符串仍然只有一个空格。 UI中未更改该属性。如何实时更改UI?我愿意接受其他选择而不是这样做。
仅供参考 - 我使用的是.NET 4.0
答案 0 :(得分:3)
这实际上是一个已在.NET Framework 4.5中修复的错误。有关更多信息,请参阅马特的答案。
Bound WPF TextBox is not updating value when the bound property enforces some business rules
如果由于某些原因无法升级到4.5,可能需要尝试此处建议的解决方法:
WPF - MVVM - Textbox getting out of sync with viewmodel property
应该提到的是,最早的官方支持的.NET Framework版本目前是4.5.2,所以毕竟升级可能是个主意:https://blogs.msdn.microsoft.com/dotnet/2015/12/09/support-ending-for-the-net-framework-4-4-5-and-4-5-1/