我创建了一个新类(派生自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"
.
解决了我遇到的问题:带有组合框和选定索引集的单元格模板。滚动时未呈现所选索引。
我不知道你是否会得到同样的改善。