最近、 MVVM Lightでアプリケーションに取り組んでいます。UIにバインドされたXAMLにTextBoxがあります。入力を検証し、数字のみが入力されていることを確認したいと思います。私は次のコードを試しました:
私のテキストボックス:
<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 ブロックに設定すると更新されますが、検証前に""、string.Empty、または入力の値にUI
設定しようとすると、 UIの更新に失敗します。
これは設計によるものですか?もしかしてバグ?私が間違っていることはありますか?
編集RaisePropertyChanged
サンプルコードに含めるのを誤って忘れました。更新しました。デバッガーがそれを上げてゲッターを介して入力を返すまでずっと実行されているのを見たので、それを上げることは問題ではありません。