我最近一直在MVVM Light中开发一个应用程序。我的XAML中有一个TextBox绑定到我的UI。我想验证任何输入并确保只输入数字。我试过以下代码:
我的文本框:
<TextBox TabIndex="1" Height="23" MinWidth="410" DockPanel.Dock="Left"
HorizontalAlignment="Left"
Text="{Binding Input, UpdateSourceTrigger=PropertyChanged}"
IsEnabled="{Binding IsEnabled}"
AcceptsReturn="False"
local:FocusExtension.IsFocused="{Binding IsFocused}">
在我的 ViewModel 中:
private string input;
public string Input
{
get { return this.input; }
set
{
decimal test;
if(decimal.TryParse(value, out test))
{
this.input = value;
}
else
{
this.input = "";
}
RaisePropertyChanged("Input");
}
}
这无法更新UI。如果我输入“B”并检查调试器,它会通过设置器运行,但实际上无法更新UI。
奇怪的是,如果我this.input = "TEST";
在 else 块中设置UI
更新,但是,如果我尝试将其设置为""、string.Empty或验证之前的输入值,则UI无法更新。
这是设计使然吗?可能是一个错误?有什么我做错了吗?
编辑我错误地忘记包含RaisePropertyChanged
在我的示例代码中。我已经更新了它。提升它不是问题,因为我已经看到调试器一直运行通过提升它并通过 getter 返回输入。