0

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;
    }
4

1 に答える 1

1

データ ソースをObservableCollectionにラップしようとしましたか?

// In constructor:
//
    ObservableCollection<MyData> data = new ObservableCollection<MyData>();
    mapItems.ItemsSource = data;

// At some other point in your code, such as a MouseClick handler.
//

    data.Add( pin );  // will update UI automatically.
于 2010-03-11T19:10:15.307 に答える