ItemTemplate上的持久性IsExpanded

时间:2012-07-01 20:50:38

标签: c# wpf data-binding

我目前正在使用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>

“标签”是我在“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>

2 个答案:

答案 0 :(得分:1)

您可以创建名为“Expandable”的包装类,它包装您的值并公开属性IsExpanded。然后以双向绑定模式将TreeViewItems IsExpanded值绑定到Expandable的IsExpanded属性以存储State。 这应该可以解决您的问题。

答案 1 :(得分:0)

您可以通过为TreeViewItem创建样式并将绑定模式设置为双向来实现。