MapitemsControls Silverlight Bing Map을 업데이트하지 않습니다
-
19-09-2019 - |
문제
Bing Silverlight지도 내에서 푸시 핀 항목을 제어하기 위해 MapitemsControl을 사용하고 있습니다.
페이지로드에 바로 새 PIN을 프로그래밍 방식으로 추가하고 핀이지도에 나타납니다. 그러나 이제 더 가져 갔고지도 클릭을 통해 데이터 소스에 핀을 추가하고 있습니다.
새 핀이 내 데이터 소스에 추가하지만지도에 표시되지 않습니다. 내 데이터 소스를 내지도 컨트롤에 다시 반환하거나 데이터 소스를 새로 고침해야합니까? 코드는 다음과 같습니다
<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;
}
해결책
데이터 소스를 관측형 수집?
// 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.
제휴하지 않습니다 StackOverflow