/** * Chiamata asincrona per inserire all'interno della mappa i pushpin * dei PoI, ottenuti tramite l'API <code>poi_update</code>. */ private async void PrintPoi() { // chiamata alla webapi per la lista PoI string json = await WebAPI.poi_update("2", false); List <PoI> poiList = new List <PoI>(); // recupera la lista dei PoI poiList = Utils.DeserializeJSONArray <PoI>(json); // chiamata alla webapi per la lista categorie json = await WebAPI.categories_update("1", false); List <Categoria> catList = new List <Categoria>(); // recupera la lista delle categorie catList = Utils.DeserializeJSONArray <Categoria>(json); if (poiList.Count != 0) { Image catImage; // creo un array di PoIonTap contenente dati che mi servirà passare nel Tap del PoI PoIonTap[] poiTap = new PoIonTap[poiList.Count]; for (int i = 0; i < poiList.Count; ++i) { poiTap[i] = new PoIonTap(); } poiLayer = new MapLayer(); // per ogni poi aggiunge il pushpin alla mappa for (int i = 0; i < poiList.Count; ++i) { MapOverlay myOverlay = new MapOverlay(); // estraggo l'immagine della categoria a cui il PoI appartiene catImage = catList[poiList[i].idcategory - 1].GetNormImage(); // riempio il poiTap con i dati che mi serve passare nella imm_Tap poiTap[i].id = poiList[i].idpoi; poiTap[i].imm = catImage; poiTap[i].name = poiList[i].short_description; // setto l'immagine della categoria come pushpin myOverlay.Content = poiTap[i].imm; // setto il DataContext da passare nella funzione imm_Tap poiTap[i].imm.DataContext = poiTap[i]; poiTap[i].imm.Tap += imm_Tap; myOverlay.GeoCoordinate = poiList[i].GetCoordinate(); poiLayer.Add(myOverlay); } poiMap.Layers.Add(poiLayer); } }
/* * Funzione che si attiva al tap di un pushpin */ void imm_Tap(object sender, System.Windows.Input.GestureEventArgs e) { // ottengo i parametri che ho passsato e li metto nell'item PoIonTap item = ((FrameworkElement)e.OriginalSource).DataContext as PoIonTap; // creo l'hyperlink button per passare alla pagina dei dettagli HyperlinkButton button = new HyperlinkButton(); button.Content = "more details >>>"; // crea la querystring string qString = "poi_id=" + item.id; // imposto la qString come DataContext che verrà poi passata alla button_Tap button.DataContext = qString; button.Tap += button_Tap; // creo una CustomMessaBox per visualizzare il nome del PoI su cui clicco CustomMessageBox cmb = new CustomMessageBox() { Caption = item.name, Content = button, LeftButtonContent = "Close", RightButtonContent = "Add CheckIn", }; cmb.Dismissed += (s1, e1) => { switch (e1.Result) { case CustomMessageBoxResult.RightButton: if ((!IsolatedStorageSettings.ApplicationSettings.Contains("userPK")) || (int)IsolatedStorageSettings.ApplicationSettings["userPK"] == 0) { MessageBox.Show("Non puoi aggiungere un Checkin se non sei registrato!"); } else { int userPK = (int)IsolatedStorageSettings.ApplicationSettings["userPK"]; //Se l'utente clicca il righbutton allora invoco la funzione per aggiungere il checkin addCheckIn("1", item.id.ToString(), "manual", userPK.ToString()); } break; } }; cmb.Show(); }