我有一个包含列表项的数据网格,此自定义列表中的一个属性是一个 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元素或其他东西。
有没有办法通知滚动条可见性的变化?或者我应该自己处理滚动事件并从数据网格中删除滚动条?
最佳答案
Datagrid 默认使用行虚拟化。当启用行虚拟化时,滚动条使用逻辑 scoll 单位(项目)而不是实际大小。
因为您的收藏仍然包含所有项目,所以滚动条大小不会改变。
解决方法:
使用 CollectionViewSource 的 Filter
事件而不是绑定(bind)到 Items View 模型。 MSDN
关于c# - 将 Datagrid 行的可见性设置为折叠似乎会破坏滚动条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31580519/