将ItemsControl项直接添加到父项

时间:2013-12-31 19:43:15

标签: c# wpf datatemplate bing-maps itemscontrol

我正在开发一个使用WPF Bing Maps库的应用程序。我正在处理的地图控件的DataContext有一个GPS坐标列表(Location个对象),每个坐标都应该由地图上的Pushpin元素表示。我希望通过XAML将这些图钉添加到地图中,使用ItemsControl(为简洁而简化):

<m:Map>
  <ItemsControl ItemsSource="{Binding GPSCoordinates}">
    <ItemsControl.ItemTemplate>
      <DataTemplate>
        <m:Pushpin Location="{Binding}">
      </DataTemplate>
    </ItemsControl.ItemTemplate>
  </ItemsControl>
</m:Map>

但这不起作用,因为Pushpin元素不会直接添加到Map元素;相反,它们由ItemsControl的{​​{1}}和ItemsPanel元素本身封装。 有没有办法生成项目列表并将ItemsControl中定义的项目直接添加到DataTemplate的父级?

换句话说,我希望Visual Tree看起来像这样:

ItemsControl

而不是:

<m:Map>
  <m:Pushpin />
  <m:Pushpin />
    ...
</m:Map>

1 个答案:

答案 0 :(得分:1)

虽然它没有将Pushpins添加为Map控件的直接子项,但MapItemsControl正是您所寻找的:

<m:Map ...>
    <m:MapItemsControl ItemsSource="{Binding GPSCoordinates}">
        <m:MapItemsControl.ItemTemplate>
            <DataTemplate>
                <m:Pushpin Location="{Binding}"/>
            </DataTemplate>
        </m:MapItemsControl.ItemTemplate>
    </m:MapItemsControl>
</m:Map>