Скрыть содержимое в элементе списка в зависимости от свойства привязки в Silverlight - PullRequest
2 голосов
/ 25 марта 2009

У меня есть xaml, который выглядит так

<ListBox>
<ListBox.ItemTemplate>
    <DataTemplate>
        <StackPanel>
            <TextBlock Text="{Binding Name}" />
            <StackPanel Orientation="Vertical" x:Name="contentPanel" >
            Content goes here...
            </StackPanel>
        </StackPanel>
    </DataTemplate>
</ListBox.ItemTemplate>

Список привязывается к объекту со свойством bool с именем ShowContent. Как получить silverlight, чтобы скрыть contentPanel, если объект с ShowContent имеет значение false?

Ответы [ 2 ]

4 голосов
/ 25 марта 2009

Напишите BoalToVisibility IValueConveter и используйте его для привязки к свойству Visibility вашей contentPanel

<StackPanel Visibility="{Binding YourBoolProperty, Converter={StaticResource boolToVisibilityResourceRef ..../>

Вы можете найти BoolToVisibility довольно легко где угодно.

Проверьте IValueConveter, если вы новичок в этом. http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx

1 голос
/ 08 января 2013

Я бы порекомендовал установить видимость 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, а не только его содержимое.

...