我对XAML和WPF很陌生,但我正在尝试以下方法。
我使用基于groupDescription的Expanders构建ListView。哪个工作正常。 现在我尝试将IsExpanded属性绑定到项目,因为如果我在我的应用程序中切换选项卡,则删除先前用户选择的展开和折叠扩展器。这意味着所有扩展器都会被默认重新崩溃,这非常令人讨厌。
但我真的不明白这应该如何运作。我可以将扩展器的IsExpanded属性绑定到相应类中的属性吗?如何区分不同的群体?
非常感谢
<ListView Name="Mails" local:FM.Register="{Binding}" local:FM.GetFocus="Loaded"
Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
ItemsSource="{Binding Path=MailsProxy.View}"
SelectionMode="Single" SelectedItem="{Binding Path=SelectedMail, Mode=TwoWay}"
local:SortList.BringIntoViewSelected="True" local:SortList.IsGridSortable="True"
ItemContainerStyle="{StaticResource InboxMailItem}"
View="{Binding Source={x:Static session:Session.Current}, Path=InboxView.View}">
<ListView.GroupStyle>
<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 Foreground="Black" BorderThickness="0,0,0,1" Style="{StaticResource ExpanderStyle}">
<Expander.Header>
<DockPanel>
<TextBlock FontWeight="Bold" FontSize="14" Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListView}, Path=DataContext.GroupBy}"/>
<TextBlock FontWeight="Bold" FontSize="14">:</TextBlock>
<TextBlock FontSize="14" Text="{Binding Path=Name, Converter={StaticResource GroupHeaderConverter}}" Margin="5,0,0,0"/>
</DockPanel>
</Expander.Header>
<ItemsPresenter />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</ListView.GroupStyle>
<ListView.Resources>
<Style TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="DataContext" Value="{Binding Source={x:Static session:Session.Current}, Path=InboxView}"/>
</Style>
</ListView.Resources>
</ListView>
答案 0 :(得分:-1)
定义一些静态bool变量并为它们设置属性,当用户展开或折叠特定节点时,将相应的值分配给布尔变量,即isExpanded = Mails.Expanded,当你在页面渲染中再次回到同一个标签或页面加载检查静态变量的值并将相同的值赋给Mails.Expanded = isExpanded这将解决您的问题
答案 1 :(得分:-1)
代码就是这样。
static bool isExpanded = false;
我正在考虑Window1是添加列表视图控件的窗口的名称
private void Window1_Load(object sender, RoutedEventArgs e)
{
Mails.Expanded = isExpanded;
//... rest of your code
}
private void Mails_SelectionChanged(object sender, RoutedEventArgs e)
{
isExpaned = Mails.Expanded;
}
希望这可以清除你的观点。