私は検証プロパティを実行しようとしています。WPFでデータを検証し、デフォルト値を設定する方法は?
public int? Number
{
get { return _number; }
set
{
if (_number != value)
{
_number = value;
RaisePropertyChanged("Number");
}
}
}
このプロパティはテキストボックスにバインドされています。
- ユーザーがテキストボックスを空(textbox.text = "")のままにしているので、Numberプロパティはnull値(代わりに "")を受け取る必要があるとします。
- ユーザーが "2b"を入力した場合、NumberプロパティはNULL値を持つ必要があります(エラーであるため)。ただし、テキストボックスには "2b"と表示されている必要があります。
IDataNotifyErrorとValidationRulesはこれで動作していないと思います。どのようにこれらの状況を解決できますか?
編集:ユーザーが間違った形式を入力したときに、カスタムメッセージを表示するためにValidationRuleも使用しています。しかし、これが起こると、nullにプロパティを起動しません。そしてそのエラーに真を当てはめると、それは起動しましたが、エラーメッセージは表示されません。
<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);
}
}
...
}
この状況でValidationRulesはどのように機能しませんか? –
@Kai検証は単に検証のためのいくつかの制約をユーザに通知するためのものです。私は、この場合のように論理を扱っていないことを意味します。 –