WPF 列表视图虚拟化模式在绑定时出现问题



我创建了一个新类(派生自listview)。

此列表视图是具有视图模型的视图的一部分。此视图模型有两个主要属性 - 1)myView(ICollectionView)...和可写(布尔值)。

每个列表视图

项(列表视图内的行)都有一个显示一组控件的控件模板。

这些控件中很少有的可见性是由"isWwriteable"属性决定的......通过查找祖先方法。

问题是..当我们滚动此列表视图时,即使属性的值为"True",也会禁用某些使用"isWritable"属性启用/禁用的控件。

如果我删除回收,它工作正常...我认为这个问题是 - 因为它重用旧容器。绑定并没有完美地与FindAncestor发生。

如您所见,我在这里使用虚拟化。项目面板被回收利用。所以我认为当我们重用itempanel时,使用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>

试试VirtualizationMode="Standard" .

解决了我遇到的问题:带有组合框和选定索引集的单元格模板。滚动时未呈现所选索引。

我不知道你是否会得到同样的改善。

最新更新