1

マップに別の画鋲を表示するために使用する DataTemplateSelector を作成しました。私は今、私が望むように動作する次の DataTemplate を持っていますが、それは画鋲ではなく、地図上に表示されるテキストブロックです。

<DataTemplate x:Key="pushpinSelector">
    <my:Pushpin Location="{Binding Location}" Tap="Pushpin_Tap">
        <my:Pushpin.Template>
            <ControlTemplate>
                <local:PushpinTemplateSelector Content="{Binding}">
                    <local:PushpinTemplateSelector.ClusterTemplate>
                        <DataTemplate>
                            <TextBlock Text="Cluster" Width="100" Foreground="YellowGreen"></TextBlock>
                        </DataTemplate>
                    </local:PushpinTemplateSelector.ClusterTemplate>
                    <local:PushpinTemplateSelector.PushpinTemplate>
                        <DataTemplate>
                            <TextBlock Text="Pushpin" Width="100" Foreground="Blue"></TextBlock>
                        </DataTemplate>
                    </local:PushpinTemplateSelector.PushpinTemplate>
                </local:PushpinTemplateSelector>
            </ControlTemplate>
        </my:Pushpin.Template>
    </my:Pushpin>
</DataTemplate>

次の形式でも機能すると思います。

<DataTemplate x:Key="pushpinSelector">
    <local:PushpinTemplateSelector Content="{Binding}">
        <local:PushpinTemplateSelector.ClusterTemplate>
            <DataTemplate>
                <my:Pushpin Location="{Binding Location}" Content="{Binding Count}" Foreground="YellowGreen"></my:Pushpin>
            </DataTemplate>
        </local:PushpinTemplateSelector.ClusterTemplate>
        <local:PushpinTemplateSelector.PushpinTemplate>
            <DataTemplate>
                <my:Pushpin Location="{Binding Location}" Foreground="Blue"></my:Pushpin>
            </DataTemplate>
        </local:PushpinTemplateSelector.PushpinTemplate>
    </local:PushpinTemplateSelector>
</DataTemplate>

しかし、このテンプレートでは、マップ上に 1 つの黒い画鋲しか表示されていません。バインディングに何か問題がありますか? これが期待どおりに機能しない理由がわかりません。

@localjoost のリクエストに応じて、datatemplateselector のコード:

抽象クラス:

public abstract class DataTemplateSelector : ContentControl
{
    public virtual DataTemplate SelectTemplate(
        object item, DependencyObject container)
    {
        return null;
    }

    protected override void OnContentChanged(object oldContent, object newContent)
    {
        base.OnContentChanged(oldContent, newContent);

        ContentTemplate = SelectTemplate(newContent, this);
    }
}

そして、抽象クラスの実装:

     public class PushpinTemplateSelector : DataTemplateSelector
{
    public DataTemplate ClusterTemplate
    {
        get;
        set;
    }

    public DataTemplate PushpinTemplate
    {
        get;
        set;
    }

    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        PushpinModel model = item as PushpinModel;

        if (model.CurrentObject == null)
        {
            return ClusterTemplate;
        }
        else
        {
            return PushpinTemplate;
        }
    }
}

また、マップ コントロールで Datatemplate (アプリケーション リソース セクションで定義) を使用する方法:

<my:Map Height="624" HorizontalAlignment="Left" Name="map1" VerticalAlignment="Top" Width="468" CredentialsProvider="XXXXX" 
        ZoomLevel="13">
    <my:MapItemsControl Name="pushPinModelsLayer" ItemsSource="{Binding PushpinModels}" ItemTemplate="{StaticResource pushpinSelector}" />
    <my:Pushpin Name="myLocation" Template="{StaticResource MyLocationTemplate}"></my:Pushpin>
</my:Map>

私が見る限り、画鋲セレクター テンプレート内にロケット科学はありません。

4

2 に答える 2

0

私は通常、複数のレイヤーを使用してこれを行います。これは、実際に動作するプログラムから派生したコードです。レイヤーを追加すると解決する場合がありますか?

<Microsoft_Phone_Controls_Maps:Map x:Name="map"
                   CredentialsProvider="blah">
  <Microsoft_Phone_Controls_Maps:MapLayer x:Name="MapLayer_GasStations">
    <Microsoft_Phone_Controls_Maps:MapItemsControl 
      ItemsSource="{Binding GasStations}" 
      ItemTemplate="{StaticResource GasStationViewModelTemplate}" />
  </Microsoft_Phone_Controls_Maps:MapLayer>
  <Microsoft_Phone_Controls_Maps:MapLayer x:Name="MapLayer_RoadBlocks">
    <Microsoft_Phone_Controls_Maps:MapItemsControl 
      ItemsSource="{Binding RoadBlocks}" 
      ItemTemplate="{StaticResource RoadBlockViewModelTemplate}" />
  </Microsoft_Phone_Controls_Maps:MapLayer>
</Microsoft_Phone_Controls_Maps:Map>
于 2012-05-04T08:26:16.003 に答える