我需要使用 XAML/C# 为我的 WindowsStoreApp 提供帮助。
让我们从对我的问题的一个非常简短的解释开始,如果还不够清楚,那么您会在下面找到非常详细的信息:)
简而言之:我有ContentControl
一个GridView
. 将集合设置GridView
为ItemsSource
集合。在我的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
任何item
is 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>
提前感谢您的帮助和抱歉,如果我的英语有时听起来有点奇怪:)