Xaml 具有UWP MapItemsControl的多个数据模板

Xaml 具有UWP MapItemsControl的多个数据模板,xaml,uwp,windows-10-universal,uwp-xaml,uwp-maps,Xaml,Uwp,Windows 10 Universal,Uwp Xaml,Uwp Maps,我在UWP中有一个MapControl: <maps:MapControl x:Name="BikeMap" ZoomLevel="17" Center="{Binding CenterPoint, Mode=TwoWay}"> <maps:MapItemsControl x:Name="MapItems" ItemsSource="{Binding BikePoints}" ItemTemplate="{StaticRe

我在UWP中有一个
MapControl

<maps:MapControl x:Name="BikeMap" ZoomLevel="17" Center="{Binding CenterPoint, Mode=TwoWay}">
    <maps:MapItemsControl x:Name="MapItems" ItemsSource="{Binding BikePoints}"
                        ItemTemplate="{StaticResource BikePointTemplate}"/>
</maps:MapControl>

我使用XAML数据模板添加MapElements,我的ItemsSource是一个简单对象列表

但是,UWP似乎没有提供指定
DataTemplate
DataType
的方法,
MapItemsControl
没有设置
DataTemplateSelector
的属性

是否有人知道如何在MapItemsControl中使用多个数据模板,并根据ItemsSource中的对象类型选择相关数据模板?

没有用于设置的属性。为了实现您想要的,我们可以通过将其设置为中的模板内容,然后使用属性来设置

以下是一个简单的示例:

XAML:

这只是一个例子。在这个示例中,我使用了两个具有不同背景的数据模板,并创建了一个自定义的
DataTemplateSelector
,它可以根据对象类型选择
DataTemplate
。如果您有多种对象类型,也可以参考以下答案:

没有用于设置的属性。为了实现您想要的,我们可以通过将其设置为中的模板内容,然后使用属性来设置

以下是一个简单的示例:

XAML:


这只是一个例子。在这个示例中,我使用了两个具有不同背景的数据模板,并创建了一个自定义的
DataTemplateSelector
,它可以根据对象类型选择
DataTemplate
。如果您有几种对象类型,也可以参考以下答案:

很难相信UWP MapItemsControl不是从ItemsControl派生的。您可能会选择另一个地图库,其中MapItemsControl实际上是一个带有工作ItemTemplateSelector的ItemsControl,例如。Hello@JayZuo MSFT我还没有尝试过,因为我一直很忙。我很快就会抽空去做的!很难相信UWP MapItemsControl不是从ItemsControl派生的。您可能会选择另一个地图库,其中MapItemsControl实际上是一个带有工作ItemTemplateSelector的ItemsControl,例如。Hello@JayZuo MSFT我还没有尝试过,因为我一直很忙。我很快就会抽空去做的!感谢这是一个很好的解决方案,但是地图控件在初始绑定和渲染后不会添加更多的项目。。。我似乎不明白为什么。只绘制了初始项。啊哈,[new ObservableCollection]无法更新,但[new ObservableCollection]工作正常。。。不知道为什么。这是一个很好的解决方案,但是地图控件在初始绑定和渲染后不会添加更多的项目。。。我似乎不明白为什么。只绘制了初始项。啊哈,[new ObservableCollection]无法更新,但[new ObservableCollection]工作正常。。。不知道为什么。
<Page x:Class="UWPApp.MainPage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:Maps="using:Windows.UI.Xaml.Controls.Maps"
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
      xmlns:local="using:UWPApp"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
      mc:Ignorable="d">
    <Page.Resources>
        <DataTemplate x:Key="GreenDataTemplate">
            <StackPanel Background="Green">
                <TextBlock Margin="5"
                           Maps:MapControl.Location="{Binding Location}"
                           Maps:MapControl.NormalizedAnchorPoint="0.5,0.5"
                           FontSize="20"
                           Text="{Binding Name}" />
            </StackPanel>
        </DataTemplate>
        <DataTemplate x:Key="RedDataTemplate">
            <StackPanel Background="Red">
                <TextBlock Margin="5"
                           Maps:MapControl.Location="{Binding Location}"
                           Maps:MapControl.NormalizedAnchorPoint="0.5,0.5"
                           FontSize="20"
                           Text="{Binding Name}" />
            </StackPanel>
        </DataTemplate>

        <local:MyTemplateSelector x:Key="MyTemplateSelector" GreenTemplate="{StaticResource GreenDataTemplate}" RedTemplate="{StaticResource RedDataTemplate}" />
    </Page.Resources>
    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Maps:MapControl x:Name="MyMap" MapServiceToken="MapServiceToken">
            <Maps:MapItemsControl x:Name="MyMapItemsControl" ItemsSource="{Binding}">
                <Maps:MapItemsControl.ItemTemplate>
                    <DataTemplate>
                        <ContentControl Content="{Binding}" ContentTemplateSelector="{StaticResource MyTemplateSelector}" />
                    </DataTemplate>
                </Maps:MapItemsControl.ItemTemplate>
            </Maps:MapItemsControl>
        </Maps:MapControl>
    </Grid>
</Page>