Скрыть содержимое в элементе списка в зависимости от свойства привязки в Silverlight
-
21-08-2019 - |
Вопрос
У меня есть xaml, который выглядит так
<ListBox>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Name}" />
<StackPanel Orientation="Vertical" x:Name="contentPanel" >
Content goes here...
</StackPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
Список привязывается к объекту с помощью логического свойства ShowContent.Как заставить Silverlight скрыть контентную панель, если объект с ShowContent имеет значение false?
Решение
Напишите BoolToVisibility IValueConveter и используйте его для привязки к свойству Visibility вашей contentPanel.
<StackPanel Visibility="{Binding YourBoolProperty, Converter={StaticResource boolToVisibilityResourceRef ..../>
Вы можете легко найти BoolToVisibility где угодно.
Проверьте IValueConveter, если вы новичок в этом. http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx
Другие советы
Я бы рекомендовал установить видимость ListBoxItem на уровне ListBoxItem, иначе вы получите крошечные пустые элементы списка из-за значений заполнения и границ по умолчанию, например.
<ListBox>
<ListBox.Resources>
<Style TargetType="ListBoxItem">
<Setter Property="Visibility" Value="{Binding MyItem.IsVisible, Converter={StaticResource BooleanToVisibilityConverter}}" />
</Style>
</ListBox.Resources>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<CheckBox Content="{Binding MyItemName}" IsChecked="{Binding IsVisible, Mode=TwoWay}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Это скрывает весь ListBoxItem, а не только его содержимое.