Ocultar conteúdo no item listbox dependendo de uma propriedade de ligação no Silverlight
-
21-08-2019 - |
Pergunta
Eu tenho XAML que lookes como este
<ListBox>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Name}" />
<StackPanel Orientation="Vertical" x:Name="contentPanel" >
Content goes here...
</StackPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
Os liga ListBox para um objeto com uma propriedade bool chamado showContent. Como faço para obter o Silverlight para esconder a ContentPanel se o objeto com showContent é falsa?
Solução
Escrever um BoolToVisibility IValueConveter e usá-lo para ligar para a propriedade de visibilidade do seu ContentPanel
<StackPanel Visibility="{Binding YourBoolProperty, Converter={StaticResource boolToVisibilityResourceRef ..../>
Você pode encontrar uma BoolToVisibility muito fácil em qualquer lugar.
Verifique IValueConveter se você é novo para isso. http://msdn.microsoft.com/en- us / library / system.windows.data.ivalueconverter.aspx
Outras dicas
Eu recomendaria definindo a visibilidade ListBoxItem no nível ListBoxItem ou você vai acabar com pequenos itens de caixa de listagem vazias devido ao preenchimento padrão e valores de fronteira por exemplo.
<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>
Isto esconde todo o ListBoxItem não apenas o conteúdo do mesmo.