Подтвердить что ты не робот

Связывание видимости элемента управления с "Count" IEnumerable

У меня есть список объектов, содержащихся в IEnumerable < > . Я хотел бы установить видимость элемента управления на основе подсчета этого списка. Я пробовал:

 Visibility="{Binding MyList.Count>0?Collapsed:Visible, Mode=OneWay}"

Но это не работает. Я попытался связать MyList.Count с текстом в текстовом блоке, чтобы убедиться, что значение счета верное, и оно есть. Кажется, что это не похоже на правильность видимости.

4b9b3361

Ответ 1

Вы не можете использовать логические или кодовые выражения в привязках (он ожидает PropertyPath). Либо используйте converter или триггеры, что я и сделаю:

<YourControl.Style>                     
    <Style TargetType="YourControl">
        <Setter Property="Visibility" Value="Collapsed" />
        <Style.Triggers>
            <DataTrigger Binding="{Binding MyList.Count}" Value="0">
                <Setter Property="Visibility" Value="Visible" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</YourControl.Style>

(Вы можете, конечно, реорганизовать стиль resource.

Ответ 2

Существует три способа:

  • использовать триггеры, упомянутые H.B.
  • для использования преобразователей путем внедрения IValueConverter в классе и установки свойства Converter для привязки к экземпляру IValueConverter в этом классе
  • чтобы определить свойство в ViewModel, чтобы напрямую вернуть состояние видимости.

Вы всегда можете использовать метод Triggers, и это всегда хороший подход. Третий метод полезен (и лучше всего) при использовании шаблона MVVM (и вы не ограничиваете себя ссылкой на связанные с UI сборки в вашем ViewModel) Я предлагаю использовать триггеры, но если вы не хотите, чтобы ваш xaml был грязным, эти коды разметки использовали конвертеры.

Ответ 3

Вам следует использовать конвертер, который преобразует свойство Count в значение Видимость или, возможно, новое свойство "HasItems" boolean в значение Видимость. Мы используем что-то, например, называемое boolToVisibilityConvert, для обработки таких заданий.

Я могу дать вам более точные сведения, если они вам понадобятся.