【发布时间】:2013-11-13 02:09:33
【问题描述】:
我最近一直在 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。
奇怪的是,如果我在 else 块中设置 this.input = "TEST";,UI 会更新,但是,如果我尝试将其设置为 "",string.Empty,或者验证前输入的值,UI更新失败。
这是设计使然吗?可能是一个错误?是不是我做错了什么?
编辑我错误地忘记在我的示例代码中包含RaisePropertyChanged。我已经更新了它。提升它不是问题,因为我已经看到调试器一直运行通过提升它并通过 getter 返回输入。
【问题讨论】:
-
你实际上并没有提高
OnPropertyChanged。这个类是否实现了IPropertyChanged? -
@neoistheone 我正在提高
RaisePropertyChanged。我错误地忘了把它放在问题的代码中。 -
这个问题已经解决了吗?我完全符合您的情况,可以确认您提出的每一个观点。
标签: c# wpf xaml mvvm mvvm-light