【发布时间】:2014-07-13 17:27:21
【问题描述】:
我正在尝试使用 WinRT ListView 组件在两个级别上进行嵌套分组。到目前为止,我无法传输我为 WPF 找到的示例,因为 WinRT 组件缺少 WPF 中存在的一些属性 - 例如,WinRT 中的 CollectionViewSource 没有用于定义的 GroupDescriptions 属性几组。
我试图制作的视图是这样的:
到目前为止,我已经能够在 WinRT 中获得这样的视图 - 缺少版本级别:
到目前为止,我提出的 XAML 有两个 CollectionViewSource 对象,我将 categoryViewSource 的 Source 设置为 versionViewSource 的 View。 ListView 的 ItemsSource 绑定到 categoryViewSource。这显然在某种程度上有效,因为我正在显示一些数据。
<UserControl.Resources>
<DataTemplate x:Key="versionTemplate">
<TextBlock Margin="10" Style="{StaticResource SubheaderTextBlockStyle}" Foreground="{ThemeResource AccentColorBrush}">
<Run Text="{Binding VersionString}" /><Run Text=" (" /><Run Text="{Binding ReleaseDateString}" /><Run Text=")" />
</TextBlock>
</DataTemplate>
<DataTemplate x:Key="categoryTemplate">
<TextBlock Margin="10" Style="{StaticResource SubheaderTextBlockStyle}" Foreground="{ThemeResource AccentColorBrush}" Text="{Binding Category}" />
</DataTemplate>
<DataTemplate x:Key="releaseNoteTemplate">
<TextBlock Margin="10" Style="{StaticResource BodyTextBlockStyle}" Text="{Binding Text}" />
</DataTemplate>
<local:ReleaseNotesTemplateSelector x:Key="releaseNotesTemplateSelector"
VersionTemplate="{StaticResource versionTemplate}"
CategoryTemplate="{StaticResource categoryTemplate}"/>
<CollectionViewSource x:Name="versionViewSource" IsSourceGrouped="True" ItemsPath="Categories" />
<CollectionViewSource x:Name="categoryViewSource" IsSourceGrouped="True" ItemsPath="Items" />
</UserControl.Resources>
<ListView ItemsSource="{Binding Source={StaticResource categoryViewSource}}"
ItemTemplate="{StaticResource releaseNoteTemplate}"
IsItemClickEnabled="False">
<ListView.GroupStyle>
<GroupStyle HeaderTemplateSelector="{StaticResource releaseNotesTemplateSelector}" />
</ListView.GroupStyle>
</ListView>
Source 属性在后面的代码中设置如下:
if (this.DataContext is ReleaseNotesViewModel)
{
this.versionViewSource.Source = this.ViewModel.Versions;
this.categoryViewSource.Source = this.versionViewSource.View;
}
ReleaseNotesTemplateSelector 的工作方式如下:
public class ReleaseNotesTemplateSelector : DataTemplateSelector
{
public DataTemplate VersionTemplate { get; set; }
public DataTemplate CategoryTemplate { get; set; }
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
{
if (item is ReleaseNoteVersionViewModel)
return this.VersionTemplate;
else if (item is ReleaseNoteCategoryViewModel)
return this.CategoryTemplate;
return base.SelectTemplateCore(item, container);
}
}
我当然可以继续使用硬类型视图,但如果可能的话,我宁愿使用动态生成的视图。有没有人建议我如何获得嵌套分组以在第一组级别显示版本号?
【问题讨论】:
标签: xaml windows-runtime winrt-xaml