Ответ - да, вы можете делать то, что пытаетесь сделать, но не так, как вы это делаете в настоящее время.(Между прочим, я только что заметил, что на этот вопрос уже получен очень хороший ответ, поэтому я подумал, что по крайней мере опущу краткую ссылку на него.)
На основании ссылки выше.
- Вам нужно написать собственный валидатор (что вы уже сделали)
- Вам нужно будет украсить вашу модель в классе уровень, а не уровень свойства
- Вы не будете использовать сами свойства в качестве параметров - вместо этого вы просто будете ссылаться на них как на строки, которые нужно искать с помощью отражения
[Validate2Date(BeginDate, EndDate, ...
становится
[Validate2Date(StartDate = "BeginDate", EndDate = "EndDate", ...
Затем вы переопределяете IsValid () и размышляете над необходимыми свойствами для выполнения сравнения. Из ссылки
....
var properties = TypeDescriptor.GetProperties(value);
object originalValue = properties.Find(OriginalProperty, true /* ignoreCase */).GetValue(value);
object confirmValue = properties.Find(ConfirmProperty, true /* ignoreCase */).GetValue(value);
return Object.Equals(originalValue, confirmValue);
....