ValidationRuleを継承したValidationRuleクラスを作成する。今回はxamlで文字数を指定できるStrValidationRuleを作成した。回りくどい記述は警告を回避するため。
using System.Globalization;
using System.Windows.Controls;
namespace AddressBook
{
internal class StrValidationRule : ValidationRule
{
public int MinLength { get; set; } = int.MinValue;
public int MaxLength { get; set; } = int.MaxValue;
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
if (value is null)
{
if (MinLength == 0)
return ValidationResult.ValidResult;
else
return new ValidationResult(false, "この項目は必須です");
}
string? str = value.ToString();
if (str != null)
{
if (str.Length == 0)
{
if (MinLength == 0)
return ValidationResult.ValidResult;
else
return new ValidationResult(false, "この項目は必須です");
}
if (str.Length < MinLength)
{
return new ValidationResult(false, "値が短すぎです");
}
if (str.Length > MaxLength)
{
return new ValidationResult(false, "値が長すぎです");
}
}
return ValidationResult.ValidResult;
}
}
}
Binding.ValidationRulesタグを追加する。MinLengthとMaxLengthを設定することにより文字数の範囲を指定できる。
起動時のバリデーションを無効にする場合はValidatesOnTargetUpdatedを”False”にする(記述を省略する)
<TextBox x:Name="textName" Grid.Column="1" Grid.Row="1" Margin="4,4,4,4">
<TextBox.Text>
<Binding Path="Name" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:StrValidationRule ValidatesOnTargetUpdated="True" MinLength="2" MaxLength="5"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
実行結果
コメント