Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# UserControl CollectionViewSource不工作_C#_Windows Runtime_Winrt Xaml - Fatal编程技术网

C# UserControl CollectionViewSource不工作

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不会返回

我有一个包含这个XAML的用户控件


为了设置内容,我使用了这个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}}">