【问题标题】:MapItemsControls not updating Silverlight Bing MapMapItemsControls 未更新 Silverlight Bing 地图
【发布时间】:2011-10-04 15:40:51
【问题描述】:

我正在使用 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;
    }

【问题讨论】:

    标签: silverlight bing-maps pushpin


    【解决方案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.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多