WinRT:如何在ContentControl的DataTemplateSelector中访问parent's

本文关键字:parent 访问 DataTemplateSelector ContentControl WinRT | 更新日期: 2023-09-27 17:49:01

我需要帮助我的WindowsStoreApp使用XAML/c#。

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

简而言之:我在GridView中有一个ContentControlGridViewItemsSource设置为集合。在我的ContentControl我想使用自制的DataTemplateSelector。在它的SelectTemplateCore -方法我需要访问GridViewItemsSource的项目-我怎么能在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,则itemnull。我如何引用我的(parent-parent-)父GridViewItemsSource ?我完全没有指定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>

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

WinRT:如何在ContentControl的DataTemplateSelector中访问parent's

设置Content为传递给PathquelleDataTemplateDataContext,即

<ContentControl ContentTemplateSelector="{StaticResource iconTemplateSelector}" Content="{Binding}"/>

如您所述,iconTemplateSelector将获得两个项,null,然后是属性。