WPF ListView 虚拟化。如何禁用 ListView 虚拟化?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/23371810/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-13 11:39:51  来源:igfitidea点击:

WPF ListView virtualization. How to disable ListView virtualization?

c#.netwpflistview

提问by Hari Seldon

I have some troubles with custom ListView (CheckBoxes inside lost their states when scrolling ListView). Can I disable ListView virtualization without visual tree enumerating?

我在使用自定义 ListView 时遇到了一些麻烦(滚动 ListView 时,其中的复选框丢失了状态)。我可以在不枚举可视化树的情况下禁用 ListView 虚拟化吗?

<ListView>
    <ListView.Resources>
        <Style TargetType="GridViewColumnHeader">
            <Setter Property="Visibility" Value="Collapsed" />
        </Style>
    </ListView.Resources>
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Address">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox Content="{Binding Address}"/>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn Header="Name">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Name}"/>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

回答by 123 456 789 0

As stated by H.B. in their answer here:

正如 HB 在他们的回答中所说:

Set VirtualizingStackPanel.IsVirtualizingto false on the ListViewor set a normal StackPanelas the ListView.ItemsPanel.

在 上设置 VirtualizingStackPanel.IsVirtualizing为 falseListView或将正常设置 StackPanelListView.ItemsPanel

<ListView VirtualizingStackPanel.IsVirtualizing="False"/>

or

或者

<ListView>
 <ListView.ItemsPanel>
     <ItemsPanelTemplate>
       <StackPanel></StackPanel>
      </ItemsPanelTemplate>
  </ListView.ItemsPanel>
 </ListView>

回答by paparazzo

In addition to binding the IsChecked property

除了绑定 IsChecked 属性

You also may need to turn off recycling

您可能还需要关闭回收

VirtualizingStackPanel.VirtualizationMode="Standard" 

VirtualizationMode Enumeration

虚拟化模式枚举