C# UserControl CollectionViewSource不工作
我有一个包含这个XAML的用户控件C# UserControl CollectionViewSource不工作,c#,windows-runtime,winrt-xaml,C#,Windows Runtime,Winrt Xaml,我有一个包含这个XAML的用户控件 为了设置内容,我使用了这个C代码 它显示了一些元素(但它们显示为空元素),而不是全部显示 有什么不对劲吗 如果我使用的是C代码,那么它是有效的(但没有分组) 更新 添加下面的StaticResource后,它现在显示多个没有项目的组 ItemsSource="{Binding Source={StaticResource itemsSource}}" 所以我认为你误解了GroupBy方法背后的基本原理。与大多数其他Linq扩展不同,GroupBy不会返回
为了设置内容,我使用了这个C代码
它显示了一些元素(但它们显示为空元素),而不是全部显示有什么不对劲吗 如果我使用的是C代码,那么它是有效的(但没有分组) 更新 添加下面的
StaticResource
后,它现在显示多个没有项目的组
ItemsSource="{Binding Source={StaticResource itemsSource}}"
所以我认为你误解了GroupBy方法背后的基本原理。与大多数其他Linq扩展不同,GroupBy不会返回简单的对象列表,而是返回一个IGrouping列表。IGrouping接口公开一个键属性,该属性将保存在GroupBy lambda中传递的分组鉴别器的值 因此,要使列表显示组名,必须将组头模板绑定到键,而不是状态
<TextBlock Text='{Binding Key}' Margin="10" />
另外,如果将CollectionViewSource作为资源引用,则需要定义一个资源键,以便稍后在XAML中将其作为静态资源引用
<CollectionViewSource x:Name="itemsSource" x:Key="groupedTasks" IsSourceGrouped="True" />
和在列表视图中
<ListView x:Name="JobListView" ItemsSource="{Binding Source={StaticResource groupedTasks}}">
通过这种方式,我让你的例子如期发挥作用
作为补充阅读,我强烈建议您阅读Sergei Barskiy的文章,该文章演示了如何在XAML列表中使用分组,并提供了一个GroupedData类,我认为它比默认的IGrouping对象更好,可以公开数据并在UI中使用它。为什么我不能只引用它的名称?是的,您可以。只是在XAML中引用对象有不同的流派。重要的是理解它的确切含义,以及它在可维护性方面意味着什么。资源键的好处在于,它使您的资源在整个底层控件中全局可用,而不考虑元素的DataContext。使用资源键是维护视图的更好做法,实际上,如果您的元素是资源,我看不到任何有效的理由在资源键之上使用元素名称。是的,但我在想为什么我必须设置
x:key
始终为您的资源提供一个键。
<CollectionViewSource x:Name="itemsSource" x:Key="groupedTasks" IsSourceGrouped="True" />
<ListView x:Name="JobListView" ItemsSource="{Binding Source={StaticResource groupedTasks}}">