0

現在、WPFとデータバインディングを使用してデータを表示/更新しています。TreeViewとItemTemplateがあります。

<TreeView ItemsSource="{StaticResource Labels}">
    <TreeView.ItemTemplate>
        <DataTemplate>
            <Grid>
                <TreeViewItem Header="{Binding Key}">
                    <TextBlock Text="{Binding Value}" />
                </TreeViewItem>
            </Grid>
        </DataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

「Labels」は「InitializeComponent」の前に割り当てた辞書です。問題は、データを変更してTreeViewで「更新」を呼び出すたびに、すべてのツリービューアイテムが展開されていても折りたたまれた状態に戻ることです。

拡張アイテムを拡張状態に保つにはどうすればよいですか?

編集:これを行おうとしている他の人のために、私は私のために働いたXAMLを置くつもりです(私がオンラインで探していたときにそれを見つけるのに苦労したので)。IsExpandedをデータソースの一部として保持するヘルパークラスを作成しました。

<TreeView ItemsSource="{StaticResource Labels}">
    <TreeView.ItemTemplate>
        <DataTemplate>
            <Grid>
                <TreeViewItem Header="{Binding Key}"
                              IsExpanded="{Binding Path=Value.IsExpanded, Mode=TwoWay}">
                    <TextBlock Text="{Binding Value.RealValue}" />
                </TreeViewItem>
            </Grid>
        </DataTemplate>
    </TreeView.ItemTemplate>
</TreeView>
4

2 に答える 2

1

値をラップしてプロパティIsExpandedを公開する「Expandable」というラッパークラスを作成できます。次に、TreeViewItems IsExpanded値をExpandableのIsExpandedプロパティに双方向バインディングモードでバインドして、状態を格納します。これで問題が解決するはずです。

于 2012-07-01T21:50:18.560 に答える
0

これは、TreeViewItemのスタイルを作成し、バインディングモードを双方向に設定することで実現できます。

于 2012-07-01T21:08:35.253 に答える