В WPF / C # 2010 как мне заставить кнопку исчезнуть, если связанный объект данных равен нулю?

#binding

#привязка

Вопрос:

У меня есть экран, который я использую для отображения данных из таблицы данных. Привязки XAML работают, и они отображаются нормально. Однако рядом с одним полем данных у меня есть кнопка, которую я хочу использовать для других целей. Моя проблема в том, что я не хочу, чтобы кнопка показывала, является ли поле данных нулевым или пустым. Ниже приведены фрагменты кода XAML и объекта данных, которые я использую.

XAML для кнопки:

Я начинаю со скрытой кнопки.

Вот XAML, который охватывает стиль «DetailButton»:

Вот код объекта данных, который устанавливает PplOlderFlag:

         _bOlderFlag = (_sPplOlderInfo.Length > 0);

    public bool PplOlderFlag
    {
        get
        {
            return _bOlderFlag;
        }
    }
  

Как я уже сказал, привязка (PplOlderInfo) работает и отображается нормально. Но кнопка все еще там, когда PplOlderInfo равен null или пуст.

Я могу достаточно легко настроить видимость кнопки в коде позади, но только кажется, что было бы действительно здорово, если бы я мог заставить ее работать в XAML.

Есть идеи относительно того, что я упускаю или что я делаю неправильно?

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

1. По какой-то причине XAML не отображался. Как мне заставить XAML отображаться в описании моего вопроса?

Ответ №1:

Не должен ли тип PplOlderFlag иметь тип System.Windows.Видимость?

В моем тестовом приложении, если я создам эквивалентное свойство типа System.Windows.Видимость, я могу сделать кнопку видимой или невидимой по мере необходимости.

Редактировать:

Из вашего примера кода я бы реализовал как:

 public System.Windows.Visibility PplOlderFlag
{
    get
    {
        return _bOlderFlag ? System.Windows.Visibility.Visible : 
                             System.Windows.Visibility.Hidden;
    }
}
  

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

1. Вот XAML для кнопки: ‘code’ <Сетка кнопок. Столбец = «2» Сетка.Строка = «8» Поле = «5» x: Имя =»btnOlderDetail» Видимость = «Скрытый» Стиль =»{StaticResource DetailButton}»> <Кнопка. Содержимое> <Label FontSize=»20″ Содержимое = «Detail» Передний план = «White»/> </Кнопка. Содержимое> </Button>

2. Видимость кнопки в вашем примере не привязана к данным. Вам нужно что-то вроде: Видимость =»{Путь привязки =PplOlderFlag}». Также вы убедились, что класс, содержащий PplOlderFlag, реализует System. ComponentModel. INotifyPropertyChanged? Вы установили соответствующий DataContext?