我是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中可以找到的列表框等。 有人可以帮我吗?
答案 0 :(得分:0)
您可以添加另一个仅绑定到SelectedLocation的MapItemsControl,并将其他MapItemsControl绑定到除SelectedLocation之外的所有位置。
通过这种方式,您可以为选定的模板和未选择的模板分别创建模板。