WPFバインドの検証
4320 ワード
検証を行うには、ValidationRuleから継承されるRangeValidationRuleクラスを用意する必要があります.
このクラスは次のように実装されます.
インタフェースにはまだ2つのコントロールがあり、対応するXAML
1.基本検証
2.データソースの検証
3.ルーティングイベントの追加
このクラスは次のように実装されます.
class RangeValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
double d;
if (double.TryParse(value.ToString(), out d))
{
if (d >= 0 && d <= 100)
{
return new ValidationResult(true, null);
}
}
return new ValidationResult(false, "Validation Failed");
}
}
インタフェースにはまだ2つのコントロールがあり、対応するXAML
<Grid>
<TextBox Height="23" HorizontalAlignment="Left" Margin="84,63,0,0" Name="textBox1" VerticalAlignment="Top" Width="336" IsEnabled="True"/>
<Slider Name="slider1" Height="23" HorizontalAlignment="Left" Margin="84,125,0,0" VerticalAlignment="Top" Width="336" Maximum="110" Minimum="-1"/>
</Grid>
1.基本検証
//1.
binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
binding.ValidationRules.Add(new RangeValidationRule());
this.textBox1.SetBinding(TextBox.TextProperty, binding);
2.データソースの検証
//2. source
binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
binding.ValidationRules.Add(new RangeValidationRule()
{
ValidatesOnTargetUpdated = true
});
binding.NotifyOnValidationError = true;
this.textBox1.SetBinding(TextBox.TextProperty, binding);
3.ルーティングイベントの追加
this.textBox1.AddHandler(Validation.ErrorEvent, new RoutedEventHandler((sender, e) =>
{
if (Validation.GetErrors(this.textBox1).Count > 0)
{
this.textBox1.ToolTip = Validation.GetErrors(this.textBox1)[0].ErrorContent.ToString();
}
}));