根据另一个属性验证两个属性的推荐方法是什么?
经典示例 start 应低于 end 日期:
ReactiveValidatedObject如何在这里提供帮助?
我最好需要一个适用于WPF和Silverlight的解决方案。
答案 0 :(得分:2)
如果你在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;
}
}
然后数据绑定查看此ViewModel - &gt;
<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>