Как использовать 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

0 ответов

Другие вопросы по тегам