WinRT:如何在ContentControl的DataTemplateSelector中访问parent's
本文关键字:parent 访问 DataTemplateSelector ContentControl WinRT | 更新日期: 2023-09-27 17:49:01
我需要帮助我的WindowsStoreApp使用XAML/c#。
让我们从一个简短的解释我的问题开始,如果它不够清楚,然后你会在下面找到非常详细的信息:)
简而言之:我在GridView
中有一个ContentControl
。GridView
将ItemsSource
设置为集合。在我的ContentControl
我想使用自制的DataTemplateSelector
。在它的SelectTemplateCore
-方法我需要访问GridView
的ItemsSource
的项目-我怎么能在WinRT中做到这一点?
我想显示用户系统的文件夹,如图片库,连接的USB设备等。不同类型的文件夹应该有不同的图标。有些图标是XAML路径数据,有些是图像文件。文件夹存储在集合中。这个集合(名为"orderner")存储在页面的视图模型中。每个文件夹都有一个属性(基于enum)来指定它的类型。首先,我使用自定义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;
}
}
}
如果文件夹的图标基于路径,则调用ResourceDictionary
中名为"PathquelleDataTemplate"的DataTemplate
。在DataTemplate
中,除了其他ui元素外,我的ContentControl
。在这里,我想使用另一个自定义的DataTemplateSelector
再次检查文件夹的类型,并选择一个根据DataTemplate
,然后包含正确的路径和它的数据。当然,我不能只在覆盖的SelectTemplateCore(item, container)
中使用item
。如果没有DataContext
,则item
为null
。我如何引用我的(parent-parent-)父GridView
的ItemsSource
?我完全没有指定DataContext
。我找到的每一个帮助都是基于WPF的,似乎在WinRT中不起作用。或者是否有一种完全不同但更合适的方式来访问收藏?
这是一个数据模板"PathquelleDataTemplate"(在一个资源字典中)。
<DataTemplate x:Key="PathquelleDataTemplate">
<Grid Height="160" Width="220">
<StackPanel Orientation="Vertical" Background="White">
[...]
<StackPanel Orientation="Horizontal">
<ContentControl ContentTemplateSelector="{StaticResource iconTemplateSelector}" />
[...]
</StackPanel>
</StackPanel>
</Grid>
</DataTemplate>
这里只是一个datatemplate的例子DataTemplateSelector会选择:
<DataTemplate x:Key="BildOrdnerIconCCTemplate">
<Path Fill="Black" Data="[...ThePathData...]"/>
</DataTemplate>
提前感谢每一个帮助,抱歉,如果我的英语听起来有时有点奇怪:)
设置Content
为传递给PathquelleDataTemplate
的DataContext
,即
<ContentControl ContentTemplateSelector="{StaticResource iconTemplateSelector}" Content="{Binding}"/>
如您所述,iconTemplateSelector
将获得两个项,null,然后是属性。