Как использовать Fody/Validar и Caliburn.Micro, чтобы отключить / включить кнопку?
Я использую Caliburn.Micro и Fody/Validar.
Я хотел бы включить / отключить кнопку на основе проверки. Я включил упрощенные детали ниже.
В моем XAML у меня просто есть кнопка с именем:
<Button x:Name="SaveChanges" Content="Save Changes"/>
В моей модели представления я добавил атрибут Fody / Validar [InjectValidation], и у меня есть ValidationTemplate, который работает (я использую его в другом месте в проекте)
Также в моей модели представления я реализовал:
public async Task SaveChanges()
{
...
}
Это вызывается при нажатии кнопки. Также в представлении модели я добавил:
public bool CanSaveChanges { get; set; }
и это включает и отключает кнопку.
Модель представления имеет BindableCollection элементов:
[ItemsIsValid]
public BindableCollection<ItemViewModel> Items { get; set; }
и реализовал пользовательский валидатор для этой коллекции
public class ItemsIsValid : ValidationAttribute
{
public override bool IsValid(object value)
{
if (value is null)
{
return false;
}
var collection = value as BindableCollection<ItemViewModel>;
if (collection.Count == 0)
{
return false;
}
return true;
}
}
Поскольку Fody / Validar внедряет validationTemplate, я не могу понять, как ссылаться на него, чтобы установить свойство CanSaveChanges, так как Visual Studio не знает об этом до времени компиляции. Нужно ли слушать событие? Я в основном пропускаю шаг, как
CanSaveChanges = !validationTemplate.HasErrors