新しいクラス (リストビューから派生) を作成しました。
このリストビューは、ビューモデルを持つビューの一部です。このビューモデルには、1)myView(ICollectionView)... と isWritable(bool) という 2 つの主要なプロパティがあります。
各リストビュー項目 (リストビュー内の行) には、一連のコントロールを表示するコントロール テンプレートがあります。
これらのコントロールのいくつかの可視性は、「isWritable」プロパティによって決定されます...FindAncestor メソッドを通じて。
問題は..このリストビューをスクロールすると、プロパティの値が「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>