我有一个 linq 实体,包装在我的 ViewModel 中的一个属性中:
public NA_Header Na_Header
{
get
{
_na_header=Job.NA_Headers.FirstOrDefault();
return _na_header;
}
set { _na_header = value; }
}
我在我的视图中使用这个 Na_Header 属性来更新我的 GUI (xaml) 中的字段:
<Toolkit:DateTimePicker BorderBrush="Gray" Grid.Column="1" Grid.Row="1" Margin="5" VerticalAlignment="Top" Value="{Binding Path=Na_Header.JobStart, Mode=TwoWay, Converter={StaticResource thisNullDateConverter}, ValidatesOnDataErrors=True}" Format="Custom" FormatString="MMM dd yyyy"/>
<Toolkit:DateTimePicker BorderBrush="Gray" Grid.Column="1" Grid.Row="2" Margin="5" VerticalAlignment="Top" Value="{Binding Path=Na_Header.JobEnd, Mode=TwoWay, Converter={StaticResource thisNullDateConverter},ValidatesOnDataErrors=True}" Format="Custom" FormatString="MMM dd yyyy"/>
请注意,我想针对 Na_Header.JobStart 和 Na_Header.JobEnd 验证此对象中的 2 个属性(这些是日期)。我将每个属性的 ValidatesOnDataErrors 设置为 true。
同样在 ViewModel 中,我实现了 IDataError:
public string this[string columnName]
{
get
{
if (columnName == "Na_Header")
{
if (Na_Header.JobStart > Na_Header.JobEnd)
return "Job Stat Date must be an earlier date than Job End Date";
}
return "";
}
}
public string Error
{
get { throw new NotImplementedException(); }
}
不幸的是,当对 JobStart 或 JobEnd 属性进行更改时,不会触发 DataError。我不认为我需要 NotifyPropertyChanged 因为它是一个 linq 实体(PropertyChanged 的东西是自动完成的)
有什么线索吗?