【发布时间】:2016-12-03 08:28:34
【问题描述】:
我有一个TextBlock 和一个CheckBox,例如:
<StackPanel >
<TextBlock Text="Colors"/>
<CheckBox Content="Blue" IsChecked="{Binding Model.Blue, ValidatesOnNotifyDataErrors=False}"/>
</StackPanel>
在我的模型中,我正在实现INotifyDataErrorInfo 并验证复选框是否被选中。如果没有检查,我将其视为错误:
public class MyModel : INotifyPropertyChanged, INotifyDataErrorInfo
{
[CustomValidation(typeof(MyModel), "CheckBoxRequired")]
public bool Blue
{
get { return _blue; }
set { _blue = value; RaisePropertyChanged(nameof(Blue)); }
}
public static ValidationResult CheckBoxRequired(object obj, ValidationContext context)
{
var model = (MyModel)context.ObjectInstance;
if (model.Blue == false)
return new ValidationResult("Blue required", new string[] { "Blue" });
else
return ValidationResult.Success;
}
//...
//INotifyPropertyChanged & INotifyDataErrorInfo implementations omitted
}
当我将ValidatesOnNotifyDataErrors 设置为true 时,它会在CheckBox 周围正确显示一个红色框。它看起来像这样:
我不希望出现红色复选框。为此,我明确地将ValidatesOnNotifyDataErrors 设置为false。这很好用。
出现错误时我想做的就是在TextBlock上显示错误,比如更改TextBlock的字体颜色。 TextBlock 如何知道CheckBox 上存在的任何错误,最好的解决方法是什么?
我的预期结果是这样的:
【问题讨论】:
标签: c# wpf validation xaml inotifydataerrorinfo