gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:42:52 25 4
gpt4 key购买 nike

我有一个包含列表项的数据网格,此自定义列表中的一个属性是一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com