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

2023-09-06 15:04:28 作者:想念常常挥霍

我有一些麻烦与自定义的ListView(复选框滚动的ListView里面的时候失去了他们的状态)。我可以禁用虚拟化的ListView没有视觉树枚举?

 < ListView控件>
    < ListView.Resources>
        <风格的TargetType =GridViewColumnHeader>
            < setter属性=能见度VALUE =折叠/>
        < /样式和GT;
    < /ListView.Resources>
    < ListView.View>
        < GridView控件>
            < GridViewColumn标题=地址>
                < GridViewColumn.CellTemplate>
                    <的DataTemplate>
                        <复选框CONTENT ={绑定地址}/>
                    < / DataTemplate中>
                < /GridViewColumn.CellTemplate>
            < / GridViewColumn>
            < GridViewColumn标题=名称>
                < GridViewColumn.CellTemplate>
                    <的DataTemplate>
                        < TextBlock的文本={结合名}/>
                    < / DataTemplate中>
                < /GridViewColumn.CellTemplate>
            < / GridViewColumn>
        < / GridView的>
    < /ListView.View>
< / ListView控件>
 

解决方案

正如由HB在their回答这里:

  

套装    VirtualizingStackPanel.IsVirtualizing   假的的ListView 或设置正常    的StackPanel   作为    ListView.ItemsPanel

 < ListView控件VirtualizingStackPanel.IsVirtualizing =FALSE/>
 

 < ListView控件>
 < ListView.ItemsPanel>
     < ItemsPanelTemplate>
       < StackPanel的>< / StackPanel的>
      < / ItemsPanelTemplate>
  < /ListView.ItemsPanel>
 < / ListView控件>
 
.NET WPF教程 19 ListView示例 ①

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.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>

解决方案

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

Set VirtualizingStackPanel.IsVirtualizing to false on the ListView or set a normal StackPanel as the ListView.ItemsPanel.

<ListView VirtualizingStackPanel.IsVirtualizing="False"/>

or

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