0

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

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

简而言之:我有ContentControl一个GridView. 将集合设置GridViewItemsSource集合。在我的ContentControl我想使用自制的DataTemplateSelector。在它的SelectTemplateCore- 方法中,我需要访问GridView's的项目ItemsSource- 我如何在 WinRT 中做到这一点?

详细地:

我想显示用户系统的文件夹,如图片库、连接的 USB 设备等。不同类型的文件夹会有不同的图标。我有一些图标作为 XAML 路径数据,还有一些作为图像文件。这些文件夹存储在一个集合中。此集合(名为“Ordner”)存储在页面的视图模型中。每个文件夹都有一个指定其类型的属性(基于枚举)。首先,我使用自定义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;
        }
    }
}

如果文件夹的图标基于路径,则调用 a中DataTemplate名为“PathquelleDataTemplate” ResourceDictionary。除了其他UIDataTemplate元素之外,我的ContentControl. 在这里,我想使用另一个自定义DataTemplateSelector再次检查文件夹的类型并选择一个相应的DataTemplate,然后包含正确的路径和它的数据。但我当然不能只item在覆盖的SelectTemplateCore(item, container). 没有DataContext任何itemis null。我如何引用ItemsSource我的(父母-父母-)父母GridView?我完全没有指定DataContext. 我找到的每一条帮助都基于 WPF,似乎在 WinRT 中不起作用。还是有一种完全不同但更适合的方式来访问收藏?

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

<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>

这里只是作为示例 DataTemplateSelector 将选择的 DataTemplate 之一:

<DataTemplate x:Key="BildOrdnerIconCCTemplate">
    <Path Fill="Black" Data="[...ThePathData...]"/>
</DataTemplate>

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

4

1 回答 1

0

将 设置ContentDataContext被传入的PathquelleDataTemplate,即

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

如您所述,iconTemplateSelector将获得两个项目,null,然后是属性。null 用于第一次应用模板时,第二个用于解析绑定时。

于 2014-03-09T16:45:05.437 回答