WPF Listview虚拟化模式在绑定时提供问题

时间:2012-06-15 21:29:26

标签: wpf listview mode recycle virtualizingstackpanel

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

此列表视图是视图的一部分,该视图具有视图模型。这个视图模型有两个主要属性 - 1)myView(ICollectionView)...和isWritable(bool)。

每个listview项(listview中的行)都有一个显示一组控件的控件模板。

其中一些控件的可见性由" isWritable"决定。属性...通过FindAncestor方法。

ISSUE ..当我们滚动此列表视图时,一些控件使用" isWritable"即使属性值为" True"。

,也会禁用启用/禁用的属性

如果我删除回收,它运行正常......我认为这个问题是 - 因为它重用了旧容器...... 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>

1 个答案:

答案 0 :(得分:1)

尝试VirtualizationMode="Standard"

解决了我遇到的问题:带有组合框和选择索引集的celltemplate。滚动时没有渲染选定的索引。

我不知道你的穿孔会不会得到同样的改善。