WinRT:如何在ContentControl的DataTemplateSelector中访问父项的ItemsSource

时间:2014-03-08 14:28:23

标签: c# winrt-xaml contentcontrol datatemplateselector

我需要使用XAML / C#为我的WindowsStoreApp提供帮助。

让我们从我的问题的一个非常简短的解释开始,如果它不够清楚,那么你将在下面找到非常详细的信息:)

简而言之:我在ContentControl内有一个GridViewGridViewItemsSource设置为集合。在我ContentControl我想使用自制DataTemplateSelector。在SelectTemplateCore方法中,我需要访问GridView的{​​{1}}项 - 我怎样才能在WinRT中执行此操作?

详细说明:

我想显示用户系统的文件夹,如图片库,连接的USB设备等。不同类型的文件夹应获得不同的图标。我有一些图标作为XAML路径数据,有些作为图像文件。文件夹存储在Collection中。此Collection(名为“Ordner”)存储在Page的Viewmodel中。每个文件夹都有一个属性(基于枚举),用于指定其类型。首先,我使用自定义ItemsSource来检查文件夹的类型是否可以通过图像或路径显示。它完美地运作。

此处的代码在这里...... 我有一个像这样的页面:

DataTemplateSelector

如果文件夹的图标基于路径,则会调用<common:LayoutAwarePage [...] xmlns:common="using:De.Mms.DiplomSnma.Win8App.Common"> <common:LayoutAwarePage.Resources> <common:OrdnerDataTemplateSelector x:Key="ordnerTemplateSelector" TemplatePathquelle="{StaticResource PathquelleDataTemplate}" TemplateBildquelle="{StaticResource BildquelleDataTemplate}" /> </common:LayoutAwarePage.Resources> <GridView ItemsSource="{Binding Ordner}" ItemTemplateSelector="{StaticResource ordnerTemplateSelector}" > [...] </GridView> </common:LayoutAwarePage> class OrdnerDataTemplateSelector : DataTemplateSelector { public DataTemplate TemplateBildquelle { get; set; } public DataTemplate TemplatePathquelle { get; set; } protected override DataTemplate SelectTemplateCore (object item, DependencyObject container) { OrdnerViewModel ordner = item as OrdnerViewModel; if (ordner.OrdnerTyp.Equals(EnumClass.OrdnerTyp.Sharepoint)) { return TemplateBildquelle; } else { return TemplatePathquelle; } } } 中名为“PathquelleDataTemplate”的DataTemplate。在ResourceDictionary内,除了其他UI元素DataTemplate之外。在这里,我想使用另一个自定义ContentControl再次检查文件夹的类型,然后选择一个DataTemplateSelector,然后包含正确的路径及其数据。但当然我不能在覆盖的DataTemplate中使用item。没有任何SelectTemplateCore(item, container) DataContextitem。如何引用我(父母 - 父母)父母null的{​​{1}}?我完全没有指定ItemsSource。我发现的每一个帮助都基于WPF,似乎不适用于WinRT。或者是否有一种完全不同但更适合访问Collection的方法?

这是DataTemplate“PathquelleDataTemplate”(在ResourceDictionary中)。

GridView

这里只是DataTemplateSelector选择的DataTemplate之一:

DataContext

提前感谢您的帮助和抱歉,如果我的英语听起来有时有点奇怪:)

1 个答案:

答案 0 :(得分:0)

Content设置为传递给DataContext的{​​{1}},即

PathquelleDataTemplate

如您所知,<ContentControl ContentTemplateSelector="{StaticResource iconTemplateSelector}" Content="{Binding}"/> 将获得两个项目,null,然后是属性。 null适用于首次应用模板时,第二个适用于解析绑定时。