2013-05-07 16 views
6

यहाँ के pushpins के एक संग्रह को जोड़ने XAML कोड है। ट्रेक्स एक ObservableCollection<PushPinModel> है। मैं इस कोड को चलाता हूं और केवल उपयोगकर्ता स्थान मार्कर प्रदर्शित होता है, जो मेरा वर्तमान स्थान है।MVVM Windows Phone 8 मानचित्र

उत्तर

16

मैं अंततः निर्भरता संपत्ति का उपयोग करके इसे काम करता हूं। मैं एक नया वर्ग कहा:

public static class MapPushPinDependency 
{ 
    public static readonly DependencyProperty ItemsSourceProperty = 
      DependencyProperty.RegisterAttached(
      "ItemsSource", typeof(IEnumerable), typeof(MapPushPinDependency), 
      new PropertyMetadata(OnPushPinPropertyChanged)); 

    private static void OnPushPinPropertyChanged(DependencyObject d, 
      DependencyPropertyChangedEventArgs e) 
    { 
     UIElement uie = (UIElement)d; 
     var pushpin = MapExtensions.GetChildren((Map)uie).OfType<MapItemsControl>().FirstOrDefault(); 
     pushpin.ItemsSource = (IEnumerable)e.NewValue; 
    } 


    #region Getters and Setters 

    public static IEnumerable GetItemsSource(DependencyObject obj) 
    { 
     return (IEnumerable)obj.GetValue(ItemsSourceProperty); 
    } 

    public static void SetItemsSource(DependencyObject obj, IEnumerable value) 
    { 
     obj.SetValue(ItemsSourceProperty, value); 
    } 

    #endregion 
} 

और .xaml फ़ाइल में मैं

xmlns:dp="clr-namespace:Treks.App.Util.DependencyProperties" 

जोड़ लिया है और अब .xaml फ़ाइल इस तरह दिखता है:

<maps:Map x:Name="NearbyMap" 
        Center="{Binding MapCenter, Mode=TwoWay}" 
        ZoomLevel="{Binding ZoomLevel, Mode=TwoWay}" 
        dp:MapPushPinDependency.ItemsSource="{Binding Path=Treks}" 
       > 
     <maptk:MapExtensions.Children> 
      <maptk:MapItemsControl Name="StoresMapItemsControl"> 
       <maptk:MapItemsControl.ItemTemplate> 
        <DataTemplate> 
         <maptk:Pushpin x:Name="PushPins" GeoCoordinate="{Binding Location}" Visibility="Visible" Content="test"/> 
        </DataTemplate> 
       </maptk:MapItemsControl.ItemTemplate> 
      </maptk:MapItemsControl> 
      <maptk:UserLocationMarker x:Name="UserLocationMarker" Visibility="Visible" GeoCoordinate="{Binding MyLocation}"/> 
     </maptk:MapExtensions.Children> 
    </maps:Map> 

अब सभी pushpins सही ढंग से प्रस्तुत किया जाता है।

+0

इसने मेरा मुद्दा हल किया, उत्कृष्ट दृष्टिकोण – xximjasonxx

+0

धन्यवाद मेरी समस्या को हल किया गया है – robertk

+0

क्या आप पेज.xaml.cs के लिए भी कोड प्रदान कर सकते हैं - मुझे नहीं पता कि मैं मानचित्र वस्तुओं की वास्तविक सूची कैसे बांध सकता हूं (यानी 'ट्रैक ') 'मानचित्र' या 'MapItemsControl' –

3

MapItemsControl वर्तमान में अभी तक एमवीवीएम बाइंडबल नहीं है (जो मुझे पता है)। तो सबसे अच्छा तरीका है अपने दृश्य के पीछे कोड में ItemsSource सेट करना।

हालांकि आप अभी भी अपने ViewModel में परिभाषित संग्रह का उपयोग कर सकते हैं! विकल्प ये हैं: this.StoresMapItemsControl.ItemsSource = ServiceLocator.Current.GetInstance<MainViewModel>().Locations; :

  • MVVM संदेश के माध्यम से दृश्य
  • संग्रह, कुछ इस तरह का उपयोग करने के दृश्य के DataContext का उपयोग के पीछे कोड के लिए viewmodel से संग्रह साथ भेज देते हैं
संबंधित मुद्दे