验证两个属性依赖于另一个属性的推荐方法是什么?
经典示例是开始日期应低于结束日期:
- 用户输入开始“6th”
- 用户输入end "3rd" - 两个字段都应标记为无效
- 用户将开始更正为“1st” - 两个字段都应该没问题
ReactiveValidatedObject 如何在这里提供帮助?
我最好需要一个适用于 WPF 和 Silverlight 的解决方案。
验证两个属性依赖于另一个属性的推荐方法是什么?
经典示例是开始日期应低于结束日期:
ReactiveValidatedObject 如何在这里提供帮助?
我最好需要一个适用于 WPF 和 Silverlight 的解决方案。
如果您在 WPF 应用程序中使用 MVVM 模式,那将非常简单。ViewModel 会进行验证,而不是 View 进行验证。View 应该只是一个愚蠢的层,显示 ViewModel 公开的任何内容。所有 UI 验证都应由 ViewModel 完成,以便它们可测试。
我的 ViewModel 可能如下所示:
class MyViewModel : INotifyPropertyChanged
{
/* declare ProperChanged event and implement OnPropertyChanged() method */
private DateTime _firstDate;
public DateTime FirstDate
{
get { return _firstDate; }
set
{
if (!AreDatesValid(value, _secondDate))
{
ErrorMessage = "Incorrect First Date";
return;
}
_firstDate = value;
OnPropertyChanged("FirstDate");
}
}
private DateTime _secondDate;
public DateTime SecondDate
{
get { return _secondDate; }
set
{
if (!AreDatesValid(_firstDate, value))
{
ErrorMessage = "Incorrect Second Date";
return;
}
_secondDate = value;
OnPropertyChanged("SecondDate");
}
}
private string _errorMessage;
public string ErrorMessage
{
get { return _errorMessage; }
set
{
_errorMessage = value;
OnPropertyChanged("ErrorMessage");
}
}
private bool AreDatesValid(DateTime firstDate, DateTime secondDate)
{
if(firstDate <= secondDate )
return true;
return false;
}
}
然后将 View 数据绑定到这个 ViewModel ->
<DataTemplate DataType="{x:Type ViewModel:MyViewModel}">
<Grid>
<TextBox Text="{Binding Path=FirstDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<TextBox Text="{Binding Path=SecondDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Text="{Binding Path=ErrorMessage}" />
</Grid>
<DataTemplate>