Search code examples
windows-phone-7silverlight-4.0bing-mapspushpin

Pushpin click event


I have a cluster of pushpins and i have added the click events for all the pushpins in foreach. now i need to find out which pushpin is clicked so as to do the actions accordingly. Below is my sample code.

 private void setpins()
 {
            Pushpin pin = null;    

            lstpin.Add(new clsPushpin() { stores = "chennai", _loc= new locations() { lat = 13.04, longd = 80.17 } });
            lstpin.Add(new clsPushpin() { stores = "Karur", _loc = new locations() { lat = 10.58, longd = 78.07 } });
            lstpin.Add(new clsPushpin() { stores = "coimbatore", _loc = new locations() { lat = 11.00, longd = 77.00 } });

            foreach (clsPushpin cls in lstpin)
            {
                pin = new Pushpin();
                GeoCoordinate geo = new GeoCoordinate(cls._loc.lat, cls._loc.longd);
                pin.Location = geo;
                pin.Background = new SolidColorBrush(new Color() { A = 255, R = 0, G = 100, B = 120 });
                pin.Foreground = new SolidColorBrush(Colors.White);
                mymap.Children.Add(pin);
                pin.MouseLeftButtonUp += new MouseButtonEventHandler(pushpintap);
            }
            mymap.Center = pin.Location;
            mymap.SetView(pin.Location, 5.0);
  }

  private void pushpintap(object sender, MouseButtonEventArgs e)    
  {
      //Messagebox are what ever    
      MessageBox.Show("My lat long is:"+lat,+long);    
  }

With the above snippet,the last pushpin's value is saved. But i wanna find the exact pin which gets selected to notify/pop up accoringly. Thx in advance.


Solution

  • You could do the following:

    Store the clsPushpin object in the Pushpin Tag property.

    In the pushpin click event cast the sender.tag as a clsPushpin object to get the data for that pushpin.

            foreach (clsPushpin cls in lstpin)
            {
                pin = new Pushpin();
                GeoCoordinate geo = new GeoCoordinate(cls._loc.lat, cls._loc.longd);
                pin.Location = geo;
                pin.Background = new SolidColorBrush(new Color() { A = 255, R = 0, G = 100, B = 120 });
                pin.Foreground = new SolidColorBrush(Colors.White);
                mymap.Children.Add(pin);
                pin.MouseLeftButtonUp += new MouseButtonEventHandler(pushpintap);
                pin.Tag = cls;
            }
    

    Then in your pushpintap event handler do this:

      private void pushpintap(object sender, MouseButtonEventArgs e)    
      {
      //Messagebox are what ever    
        clsPushpin cls = sender.tag as clsPushpin;
    
        MessageBox.Show("My lat long is:"+cls.lat.ToString()+","+cls.long.ToString());    
      }
    

    You probably should be using databinding to bind the data to a collection of pushpins.