Bing Map Silverlight控件的MapItemsControl中的选择状态

时间:2011-03-16 19:55:11

标签: silverlight bing-maps

我是Silverlight的新手,也是Bing Map Control的新手。 这就是我想要实现的目标

我有一个有两个属性的viewmodel,看起来像这样......

public class Vm : INotifyPropertyChanged
{
    private LocationCollection _locations;

    public LocationCollection Locations
    {
        get { return _locations; }
        set
        {
            _locations = value;
            this.Notify("Locations");
        }
    }

    private Location _selectedLocation;

    public Location SelectedLocation
    {
        get { return _selectedLocation; }
        set
        {
            _selectedLocation = value;
            this.Notify("SelectedLocation");
        }
    }

    protected virtual void Notify(string property)
    {
        if( null != this.PropertyChanged)
        {
            PropertyChangedEventArgs e = new PropertyChangedEventArgs(property);
            this.PropertyChanged(this,e);
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

在我的XAML中,我有一个列表框和一个Bing Map控件。列表框绑定到位置(显示成员现在是Latitude),地图控件也有一个MapsItemControl,它也绑定到Locations。 ListBox的SelectedItem绑定到SelectedLocation,并且地图的中心也绑定到SelectedLocation。所以xaml看起来像这样

<Grid x:Name="LayoutRoot" Background="White">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <ListBox ItemsSource="{Binding Path=Locations}"
             SelectedItem="{Binding Path=SelectedLocation, Mode=TwoWay}"
             DisplayMemberPath="Latitude"
             Grid.Row="0"/>

    <map:Map
        Grid.Row="1"
        CredentialsProvider="Av2K1aKwZLPJRS-F_m1TGlFg2bPFVVDgMGbxfFp-1rdpUrwfQmiPSouaSHrHoK-j" 
        Loaded="Map_Loaded"
        Center="{Binding Path=SelectedLocation, Mode=TwoWay}"
        ZoomLevel="17">
        <map:MapItemsControl x:Name="mapItemsControl" ItemsSource="{Binding Path=Locations}">
            <map:MapItemsControl.ItemTemplate>
                <DataTemplate>
                    <map:Pushpin 
                        Location="{Binding}"
                        />
                </DataTemplate>
            </map:MapItemsControl.ItemTemplate>
        </map:MapItemsControl>
    </map:Map>
</Grid>

当我选择列表框中的项目时,我能够看到地图的中心发生变化。但是,我想在这种情况下更改图钉模板。假设我想显示图像而不是OOB图钉。我理解如何自定义图钉的概念但是我无法在MapsItemControl中获得任何选择状态,类似于我在其他ItemsControl中可以找到的列表框等。 有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

您可以添加另一个仅绑定到SelectedLocation的MapItemsControl,并将其他MapItemsControl绑定到除SelectedLocation之外的所有位置。

通过这种方式,您可以为选定的模板和未选择的模板分别创建模板。