WPF ListView虚拟化模式在绑定时存在问题

3
我创建了一个新的类(派生自列表视图)。
这个列表视图是一个视图的一部分,这个视图有一个视图模型。这个视图模型有两个主要属性 - 1)myView(ICollectionView)...和isWritable(bool)。
每个列表视图项(列表视图中的行)都有一个控件模板,其中显示一组控件。
其中的几个控件的可见性是由"isWritable"属性决定的...通过FindAncestor方法。
问题在于当我们滚动这个列表视图时,一些使用"isWritable"属性来启用/禁用的控件被禁用,即使属性的值为"True"。
如果我删除回收,它可以正常工作...我认为这个问题是 - 因为它重复使用旧的容器,所以绑定没有完全使用FindAncestor发生。
如您所见,我在这里使用虚拟化..并且项目面板被回收。因此,我认为当我们重复使用项目面板时,数据绑定不会像预期的那样使用FindAncestor发生。
任何帮助将不胜感激!
<controls:ListViewMine                                                   
    ItemsSource="{Binding Path=myView}"
    VirtualizingStackPanel.IsVirtualizing="true"
    ScrollViewer.IsDeferredScrollingEnabled="True"
    VirtualizingStackPanel.VirtualizationMode="Recycling"
    IsSynchronizedWithCurrentItem="True"
    SelectionMode="Single" 
    Template="{StaticResource myView2}"
    AllowDrop="{Binding Path=isWritable}">
    <controls:ListViewMine.View>
        <controls:GridViewMine ScrollViewer.VerticalScrollBarVisibility="Visible" ColumnHeaderContainerStyle="{StaticResource listViewHeaderStyle}">
            <GridViewColumn Width="110"  />
            <GridViewColumn Header="Name" CellTemplate="{StaticResource templateName}"/> 
        </controls:GridViewMine>
    </controls:ListViewMine.View>
</controls:ListViewMine>

移除回收站的缺点是什么?关闭回收站会导致性能问题吗? - paparazzo
然后识别问题。你说:“如果我去掉回收,它就可以正常工作”。 - paparazzo
我的意思是说 - 如果我去掉回收,我会有性能问题,因为这将使性能降低约46%。但是,如果我保留回收,我会遇到上述问题。 - Relativity
1个回答

1
尝试使用 VirtualizationMode="Standard"
对于我遇到的问题有效:一个包含组合框和设置了选择索引的单元格模板,在滚动时无法呈现选定的索引。
不过我不知道您的表现是否会有同样的改善。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接