3

新しいクラス (リストビューから派生) を作成しました。

このリストビューは、ビューモデルを持つビューの一部です。このビューモデルには、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>
4

1 に答える 1