3

我有具有组样式的 ListBox:

<GroupStyle HidesIfEmpty="True" x:Key="GroupStyle">
            <GroupStyle.ContainerStyle>
                <Style TargetType="{x:Type GroupItem}">
                    <Setter Property="Margin" Value="0,0,0,5"/>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type GroupItem}">
                                <Expander IsExpanded="True" BorderBrush="#FFA4B97F" BorderThickness="0,0,0,1">
                                    <Expander.Header>
                                        <DockPanel Background="LightSkyBlue" 
                                                           Width="{Binding RelativeSource={RelativeSource  Mode=FindAncestor,  AncestorType={x:Type Expander}},
                                                                           Path=ActualWidth}">
                                            <TextBlock FontWeight="Bold" Text="{Binding Path=Name}" Margin="5,0,0,0" Width="100"/>
                                            <TextBlock FontWeight="Bold" Text="{Binding Path=ItemCount}"/>
                                        </DockPanel>
                                    </Expander.Header>
                                    <Expander.Content>
                                        <ItemsPresenter/>
                                    </Expander.Content>
                                </Expander>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </GroupStyle.ContainerStyle>
        </GroupStyle>

绑定集合的任何更改都会导致扩展器重新打开。有什么方法可以记住用户的偏好并让扩展器折叠起来?

4

2 回答 2

1

问题是你在用绑定集合做什么。我同意 Nikolay 的观点,最好的选择是让您的 viewmodel 有一个属性,您可以将扩展器绑定到该属性。

至于我一开始就问的问题:你是不是有点刷新了CollectionView?刷新会导致重新创建 UI。(意思是,它就像在 ObservableCollection 上重置。它告诉 UI 创建用户控件并再次加载模板的 XAML,这对性能不利)。

于 2012-08-21T15:08:25.820 回答
0

我可以建议一个简单的技巧 - 只需将 IsExpanded 属性添加到您的模型类并将 Expander.IsExpanded 绑定到它。

于 2012-04-16T07:31:56.617 回答