WPF. Если ListView пуст, ListView исчезает

у меня проблема с ListView. Если элементов нет, должно быть показано, например, что-то вроде «Нет элемента». И я могу это сделать, но если я это сделаю, ListView исчезнет. Мне нужно, чтобы этот текст отображался внутри списка, а заголовок списка должен оставаться прежним.

Мой стиль listView для пустого списка теперь:

 <Style TargetType="{x:Type ListView}" >
            <Setter Property="BorderThickness" Value="2,2,0,0"/>
            <Setter Property="BorderBrush" Value="#FFFFFF"/>

            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=Items.Count,
                    RelativeSource={RelativeSource Self}}"  Value="0">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate>

                                <Border BorderThickness="1" BorderBrush="#FFFFFF"
                                        Background="#FFFFFF">
                                   <TextBlock> No items</TextBlock>
                                </Border>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>

person LTU    schedule 31.07.2015    source источник


Ответы (1)


Было бы лучше переместить границу за пределы шаблона ListView. Просто положите его поверх и скройте, когда в ListView нет элементов:

<Grid>
    <Grid.Resources>
        <converter:InverseBooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
    </Grid.Resources>
    <ListView x:Name="List">
    </ListView>
    <Border BorderThickness="1" BorderBrush="#FFFFFF" Background="#FFFFFF"
            Visibility="{Binding ElementName=List, Path=HasItems, Converter={StaticResource BooleanToVisibilityConverter}}">
        <TextBlock> No items</TextBlock>
    </Border>
</Grid>

Конвертер:

class InverseBooleanToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if ((bool)value)
        {
            return Visibility.Collapsed;
        }

        return Visibility.Visible;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
person Glen Thomas    schedule 31.07.2015