我创建了一个新类(从 listview 派生)。
此列表视图是视图的一部分,该视图具有视图模型。此视图模型有两个主要属性 - 1)myView(ICollectionView)...和 isWritable(bool)。
每个列表视图项(列表视图内的行)都有一个控件模板,该模板显示一组控件。
其中少数控件的可见性由“isWritable”属性决定...通过 FindAncestor 方法。
问题是..当我们滚动这个列表视图时,一些使用“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>