Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将Datagrid行的可见性设置为“折叠”似乎会破坏滚动条?_C#_Wpf_Scroll_Datagrid_Visibility - Fatal编程技术网

C# 将Datagrid行的可见性设置为“折叠”似乎会破坏滚动条?

C# 将Datagrid行的可见性设置为“折叠”似乎会破坏滚动条?,c#,wpf,scroll,datagrid,visibility,C#,Wpf,Scroll,Datagrid,Visibility,我有一个Datagrid,其中包含作为列表的项,这个自定义列表中的一个属性是确定可见性的bool(可见性可以通过复选框进行切换) 我的工作是这样的: <Style x:Key="RowStyle" TargetType="DataGridRow"> <Style.Triggers> <DataTrigger Binding="{Binding Path=IsVisible}" Value="False"> <

我有一个Datagrid,其中包含作为列表的项,这个自定义列表中的一个属性是确定可见性的bool(可见性可以通过复选框进行切换)

我的工作是这样的:

<Style x:Key="RowStyle" TargetType="DataGridRow">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=IsVisible}" Value="False">
            <Setter Property="Visibility" Value="Collapsed"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=IsVisible}" Value="True">
            <Setter Property="Visibility" Value="Visible"/>
        </DataTrigger>
    </Style.Triggers>
</Style>

我的Datagrid是这样的:

<DataGrid Name="dataList" DataContext="{StaticResource DataViewSource}" ItemsSource="{Binding}" 
          ItemContainerStyle="{StaticResource RowStyle}"
          ScrollViewer.VerticalScrollBarVisibility="Auto"
          ScrollViewer.HorizontalScrollBarVisibility="Auto"
          AutoGenerateColumns="False" 
          CanUserAddRows="False" 
          CanUserDeleteRows="False" 
          IsReadOnly="True"
          CanUserReorderColumns="True" CanUserSortColumns="True"> ..etc
假设我有100行,当切换可见性时,其中80行被折叠

问题是:当项目的可见性改变时,滚动条似乎不会更新。从外观上看,这80行看起来仍然可见(小的拖动条),但当试图滚动查看20个可见项时,它需要更多的滚动,因为滚动条假设它仍然必须滚动100个或更多项


有没有办法通知滚动条可见性的变化?或者我应该自己处理滚动事件并从数据网格中删除滚动条吗?

默认情况下,数据网格使用称为行虚拟化的东西。当启用行虚拟化时,滚动条使用逻辑scoll单元(项)而不是实际大小

因为您的集合仍然包含所有项目,所以滚动条大小不会更改

解决方案:

使用CollectionViewSource的
过滤器
事件,而不是绑定到Items viewmodel