検証プロパティを実行しようとしています。次のような null 許容プロパティがあります。
public int? Number
{
get { return _number; }
set
{
if (_number != value)
{
_number = value;
RaisePropertyChanged("Number");
}
}
}
そして、このプロパティはテキストボックスにバインドされています。この2つのシナリオのみを検証したい:
- ユーザーがテキスト ボックスを空のままにしたとします (textbox.text="")。したがって、 Number プロパティは null 値を受け取る必要があります (代わりに "" )。
- また、ユーザーが「2b」と入力した場合、Number プロパティには null 値が必要ですが ( はエラーであるため)、テキスト ボックスには「2b」と表示される必要があります。
IDataNotifyError と ValidationRules がこれに対して機能していないと思います。これらの状況を解決するにはどうすればよいですか?
編集: ユーザーが間違った形式を入力したときにカスタム メッセージを表示するために、ValidationRule も使用しています。ただし、これが発生した場合、プロパティは null になりません。そのエラーに true を入力すると、起動しましたが、エラー メッセージは表示されません。
<TextBox.Text>
<Binding Path="Number" UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="True" ValidatesOnExceptions="True" NotifyOnValidationError="True" Converter="{x:Static c:IntConverter.Default}" >
<Binding.ValidationRules>
<r:NumericValidation />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
検証規則
public class NumericValidation : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
int? response;
bool noIllegalChars = TryParseStruct<int>(value.ToString(), out response);
if (noIllegalChars == false)
{
return new ValidationResult(false, "Input is not in a correct format.");
}
else
{
return new ValidationResult(true, null);
}
}
...
}