MapItemsControl を使用して、Bing Silverlight マップ内のプッシュピン アイテムを制御しています。
ページの読み込み時に、プログラムで新しいピンを追加すると、ピンがマップに表示されます。しかし、私はそれをさらに進めて、マップをクリックしてピンをデータソースに追加しています。
新しいピンがデータソースに追加されますが、マップに表示されません。データソースをマップ コントロールに再バインドする必要がありますか、それとも何らかの方法でデータ ソースを更新する必要がありますか? ここにいくつかのコードがあります
<UserControl.Resources>
<DataTemplate x:Key="PinData">
<m:Pushpin Location="{Binding Location}" PositionOrigin="BottomCenter" Width="Auto" Height="Auto" Cursor="Hand">
<m:Pushpin.Template>
<ControlTemplate>
<Grid>
<myTestApp:MasterPin DataContext="{Binding}"/>
</Grid>
</ControlTemplate>
</m:Pushpin.Template>
</m:Pushpin>
</DataTemplate>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="White">
<m:Map x:Name="myMap" CredentialsProvider="" Mode="Road" ScaleVisibility="Collapsed" >
<m:MapItemsControl x:Name="mapItems" ItemTemplate="{StaticResource PinData}"/>
</m:Map>
</Grid>
そして背後にあるコード:
public partial class Map : UserControl
{
private List< BasePin > dataSource = new List< BasePin >();
public Map()
{
InitializeComponent();
_Initialize();
}
private void _Initialize()
{
//this part works and adds a pin to the map
dataSource.Add( new BaseSite( -33.881532, 18.440208 ) );
myMap.MouseClick += Map_MouseClick;
mapItems.ItemsSource = dataSource;
}
public void Map_MouseClick(object sender, MapMouseEventArgs e))
{
BasePin pin = new BasePin();
pin.Location = myMap.ViewportPointToLocation( e.ViewportPoint );
dataSource.Add( pin );
}
}
- アップデート
私のmapItems.ItemSourceをnullに設定してからdataSourceオブジェクトに戻すと、うまくいくようです...しかし、なぜですか?
public void Map_MouseClick(object sender, MapMouseEventArgs e))
{
BasePin pin = new BasePin();
pin.Location = myMap.ViewportPointToLocation( e.ViewportPoint );
dataSource.Add( pin );
mapItems.ItemSource = null;
mapItems.ItemSource = dataSource;
}