WPF ListBoxItem可见性和ScrollBar

时间:2011-07-11 20:14:32

标签: wpf scrollbar visibility listboxitem

我希望根据数据上下文的属性来折叠某些ListBoxItems。

我想出了以下内容(为了简洁而修剪)

<ListBox ItemsSource="{Binding SourceColumns}">
     <ListBox.ItemContainerStyle>
        <Style TargetType="{x:Type ListBoxItem}">
            <Style.Triggers>
              <DataTrigger Binding="{Binding IsDeleted}" Value="True">
                 <Setter Property="Visibility" Value="Collapsed"/>
              </DataTrigger>
            </Style.Triggers>
         </Style>
      </ListBox.ItemContainerStyle>
    <ListBox.ItemTemplate>
       <DataTemplate>
         <TextBlock VerticalAlignment="Center" Margin="5,0" Text="{Binding ColumnName}"/>
       </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

这“有效”,因为它确实会折叠标记为“IsDeleted”的listboxitems,但是垂直滚动条不会调整“缺失”项。当我滚动时,突然间条形变得越来越大(没有移动),直到我滚过隐藏物品的点,然后最终开始移动。

我也尝试在数据触发器中明确地将高度和宽度设置为0,但无济于事。

有没有人知道是否有针对此的解决方法?

2 个答案:

答案 0 :(得分:1)

输入CollectinViewSource

您可以做的一件事是通过CollectionViewSource将ListBox连接到您的项目。

您要做的是在XAML中创建collectionViewSource:

<Window.Resources>
    <CollectionViewSource x:Key="cvsItems"/>
</Window.Resources>

在CodeBehind或ViewModel中连接到它

Dim cvsItems as CollectionViewSource
cvsItems = MyWindow.FindResource("cvsItems")

并将其源属性设置为您的项目集合。

cvsItems.Source = MyItemCollection

然后你可以对它进行过滤。 collectionViewSource维护集合中的所有项目,但会根据您所说的内容更改这些项目的视图。

过滤

要过滤,请使用CollectionViewSource:

创建CollectionView
Dim MyCollectionView as CollectionView = cvsItems.View

接下来写一个过滤函数:

Private Function FilterDeleted(ByVal item As Object) As Boolean
    Dim MyObj = CType(item, MyObjectType)
    If MyObj.Deleted = True Then Return False Else Return True End If
End Function

最后,写一些让魔术发生的事情:

MyCollectionView .Filter = New Predicate(Of Object)(AddressOf FilterDeleted)

我通常在可隐藏的扩展器中有复选框或Radiobuttons,可以让我来回更改我的过滤选项。这些属性绑定到属性,每个属性运行过滤器函数,该函数计算所有过滤器,然后返回该项是否应该出现。

请告诉我这是否适合您。

编辑:

我差点忘了:

<ListBox ItemsSource="{Binding Source={StaticResource cvsItems}}"/>

答案 1 :(得分:0)

答案是在列表框中设置VirtualizingStackPanel.IsVirtual =“False”。

Why don't my listboxitems collapse?