从DataTemplate中的userControl触发listboxItem可见性

时间:2019-01-07 13:17:14

标签: c# wpf binding

当数据模板中的UserControl保持不可见时,整个ListBoxItem保持不可见,但我尝试过的所有操作都失败了。

<ListBox HorizontalContentAlignment="Center">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Visual:uc_acessorio_fechado Acessorio="{Binding}"/> //when this element is collapsed, make the ListBoxItem collapsed
        </DataTemplate>
    </ListBox.ItemTemplate>     
</ListBox>

1 个答案:

答案 0 :(得分:1)

这取决于您的控件如何设置自己的“可见性”:

<ListBox>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Visual:uc_acessorio_fechado
                Acessorio="{Binding}"
                Visibility="{Binding Visibility,
                             RelativeSource={RelativeSource AncestorType=ListBoxItem},
                             Mode=OneWayToSource}"/>
        </DataTemplate>
    </ListBox.ItemTemplate>     
</ListBox>

它不适用于样式设置器,但例如分配本地属性值。


或者,您可以使用:

<ListBox>
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="ContentTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <Visual:uc_acessorio_fechado x:Name="uc" Acessorio="{Binding}"/>                        
                    </DataTemplate>
                </Setter.Value>
            </Setter>
            <Setter Property="Visibility" Value="{Binding Visibility, ElementName=uc}"/>
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>