0

達成したいこと:グループスタイル内で同じグループ名を共有するすべてのエキスパンダーを折りたたみまたは展開すること。

子アイテムを表示するために、ListBoxとその中にネストされた別のListBoxがあります。子アイテムItemsSourceは、グループの説明が添付されたCollectionViewにバインドされます。

グループアイテムテンプレートは非常に単純です。

<Expander IsExpanded="{Binding Path=WHAT_TO_DO, Mode=TwoWay}">
                <Expander.Header>
                    <TextBlock Text="{Binding Name}" />
                </Expander.Header>
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" SharedSizeGroup="{Binding Name, Converter={StaticResource GroupNameToUniqueNameConverter}}" />
                    </Grid.RowDefinitions>
                    <ItemsPresenter/>
                </Grid>
            </Expander>
4

3 に答える 3

1

これはそう簡単にはできないと思います。ここにはおそらく2つのオプションがあります

1) 手動 - 必要なすべてのエキスパンダーをバインドします。グループ内の最初の項目またはその他の適切なもの。

2) より自動化された方法では、おそらく、各グループの状態を保持する辞書を持つクラスを作成する必要があります。ここでの問題は、コントローラーが、エクスパンダーのどのインスタンスがバインディングを行っているか、またはそれがどのグループに属しているかを知る必要があることです。私がここで目にする 1 つの解決策は、辞書を使用してクラスの静的インスタンスを持つカスタム コンバーターを作成し、コンバーターを使用することです。グループ/参照を渡すためのパラメーター (ここでバインドを使用できるため、xaml ではこれは純粋な Ctrl+C、Ctrl+V 操作です)

于 2010-07-02T11:48:24.077 に答える
0

コード ビハインドで、すべてのリストボックス項目を反復処理できます。リストボックス項目ごとに、エキスパンダーが含まれているかどうかを確認する必要があります。その場合は、展開するか折りたたむだけです。アイテムを反復処理して特定のコントロールを見つける方法については、このリンクを参照してください。

ListBox 項目テンプレートを反復処理する方法はありますか?

于 2010-07-02T12:46:28.767 に答える