Я полностью с Мистером Стивом Морганом
Так что если вашей ViewModel не всегда нужно какое-то свойство, чтобы быть Required
, тогда вы не должны украшать его как Обязательное.
Я не знаю, почему вы хотите решить эту проблему, но я полагаю, что в некоторых случаях вам нужно PropertyOne
, чтобы быть Required
, если PropertyTwo
имеет значение. В этом случае вам может понадобиться сделать CustomValidationAttribute
чтобы проверить эти два свойства.
Я использую что-то вроде этого:
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
public class PropertyNeededAttribute : ValidationAttribute
{
private const string defaultErrorMessage = "'{0}' needs '{1}' to be valid.";
public PropertyNeededAttribute(string originalProperty, string neededProperty)
: base(defaultErrorMessage)
{
NeededProperty = neededProperty;
OriginalProperty = originalProperty;
}
public string NeededProperty { get; private set; }
public string OriginalProperty { get; private set; }
public override object TypeId
{
get { return new object(); }
}
public override string FormatErrorMessage(string name)
{
return String.Format(CultureInfo.CurrentUICulture, ErrorMessageString,
OriginalProperty, NeededProperty);
}
public override bool IsValid(object value)
{
object neededValue = Statics.GetPropertyValue(value, NeededProperty);
object originalValue = Statics.GetPropertyValue(value, OriginalProperty);
if (originalValue != null && neededValue == null)
return false;
return true;
}
}
примечание: Statics.GetPropertyValue(...)
ничего не делаю, но получаю значение из свойства для сравнения.
Надеюсь, это помогло:)