C #: Caliburn Micro: как мне управлять свойствами кнопки WPF с помощью привязки данных?

#c# #wpf #caliburn.micro

#c# #wpf #caliburn.micro

Вопрос:

Когда пользователь нажимает кнопку, я бы хотел, чтобы эта кнопка исчезла и была заменена кнопкой подтверждения. Приведенный ниже код — это то, что, как я думал, заставит кнопку исчезнуть, но когда я нажимаю кнопку, ничего не происходит. Метод DeleteButton() правильно подключен к XAML с использованием соглашений Caliburn Micro. Как я могу управлять видимостью кнопки или любым другим свойством из ViewModel? Спасибо.

XAML:

 <Button x:Name="DeleteButton" Visibility="{Binding DeleteButtonVisibility}"/>
  

ViewModel:

     bool _deleteButtonVisibility = true;

    public bool DeleteButtonVisibility
    {
        get { return _deleteButtonVisibility; }
        set
        {
            _deleteButtonVisibility = value;
            NotifyOfPropertyChange(() => DeleteButtonVisibility);
        }
    }

    public void DeleteButton()
    {
        DeleteButtonVisibility = false;
    }
  

Комментарии:

1. Ваша привязка кажется прекрасной, за исключением конкретного случая Visibility всегда требуется конвертер из bool в Visibility enum, но для других свойств это нормально.

Ответ №1:

Видимость не является логической, это System.Windows.Visibility

Попробуйте это:

     Visibility _deleteButtonVisibility = Visibility.Visible;

    public Visibility DeleteButtonVisibility
    {
        get { return _deleteButtonVisibility; }
        set
        {
            _deleteButtonVisibility = value;
            NotifyOfPropertyChange(() => DeleteButtonVisibility);
        }
    }

    public void DeleteButton()
    {
        DeleteButtonVisibility = Visibility.Collapsed;
    }
  

Комментарии:

1. Замечательно, спасибо! Я собирался использовать видимость. Скрыто. Есть ли веская причина использовать видимость. Свернутый? В чем разница?

2. Вы можете посмотреть здесь: learn.microsoft.com/en-us/dotnet/api /… . По сути, свернутый означает, что другие компоненты могут быть нарисованы поверх скрытой кнопки вместо резервирования места в представлении. Hidden просто отобразит пустую область, где находится скрытая кнопка. Как вы и предполагали при замене кнопки, свернутый вариант казался более подходящим.