Связывание видимости элемента управления с "Count" IEnumerable
У меня есть список объектов, содержащихся в IEnumerable < > .
Я хотел бы установить видимость элемента управления на основе подсчета этого списка. Я пробовал:
Visibility="{Binding MyList.Count>0?Collapsed:Visible, Mode=OneWay}"
Но это не работает. Я попытался связать MyList.Count с текстом в текстовом блоке, чтобы убедиться, что значение счета верное, и оно есть. Кажется, что это не похоже на правильность видимости.
Ответы
Ответ 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, для обработки таких заданий.
Я могу дать вам более точные сведения, если они вам понадобятся.