Come implementare un pulsante di navigazione nelle risorse di applicazioni condivise?

Attualmente sto cercando di creare una semplice app che estrae i dati da un’API che ho creato e la visualizzi in un elenco. Si suppone che si sia in grado di fare clic sugli elementi dell’elenco per essere spostati in una pagina di visualizzazione dettagliata con un visualizzatore di immagini, ecc. Per farlo funzionare, è necessario accedere a una pagina denominata PlanViewer.xaml (attualmente disponibile solo per l’app Windows Phone parte, lo farò per entrambi però).

Perché il mio elenco funzioni, ho creato il seguente modello di dati nella mia App.xaml condivisa:

       

Lo applico nel mio MainPage.xaml come mostrato qui:

        

Non riesco a colbind alcun evento al pulsante in App.xaml , quindi penso di dover utilizzare un’interfaccia ICommand . Potrei anche avere un errore molto più fondamentale nel modo in cui ho costruito questa cosa finora.

TL; DR per il mio objective: Voglio regolare il datatemplate in modo che ogni pulsante si colleghi a una pagina PlanViewer.xaml con un argomento che descrive quale piano deve essere mostrato (ad esempio, ID o percorso del file).

Questa è una soluzione App universale. È ansible visualizzare fondamentalmente un tutorial su Model, View e ViewModel.

Non so quale elemento dell’interfaccia utente si desidera utilizzare, ma per questo selezionerò uno supportato in Windows 8.1 e WP 8.1. Il ListView, quindi in MainPage.xaml di Project consente di definirlo.


            

Come puoi vedere, ho catalogato il pulsante con un comando e un CommandParameter . Il comando è la funzione nel ViewModel che voglio eseguire quando l’utente fa clic sul pulsante. CommandParameter è un object che si desidera passare alla funzione Comando. Nel tuo caso, il tuo TAG.


Namespace

 using System.Collections.ObjectModel; // ObservableCollection using System.Windows.Input; // ICommand 

Ora consente di definire un comando (dovrebbe essere parte del progetto condiviso)

 public class MySimpleCommand : ICommand { public void Execute(object parameter) { // do stuff based off your tags string tag = parameter as string; if(tag == "WHATEVER_YOU_WANT") { } // void of the trigger libraries, lets make this simple // navigate to your page Frame rootFrame = Window.Current.Content as Frame; rootFrame.Navigate(typeof(YOUR_PAGE)); } public bool CanExecute(object parameter) { return true; } public event EventHandler CanExecuteChanged; } 

Ora consente di impostare un modello semplice (dovrebbe far parte del progetto condiviso)

 public class sample_model { public sample_model(string artist, string song, string extra = "") { this.Artist = artist; this.Song = song; this.Extra = extra; } public string Artist { get; set; } public string Song { get; set; } public string Extra { get; set; } // this is your tag } 

Ora consente di configurare un ViewModel per i nostri ListView (s) da utilizzare. (Dovrebbe essere parte del progetto condiviso)

 public class sample_viewmodel { public sample_viewmodel() { this.DataSource = CreateData(); this.SimpleCommand = new MySimpleCommand(); // create the command } // create a static list for our demo private ObservableCollection CreateData() { ObservableCollection my_list = new ObservableCollection(); my_list.Add(new sample_model("Faith + 1", "Body of Christ", "A Track")); my_list.Add(new sample_model("Faith + 1", "Christ Again", "A Track")); my_list.Add(new sample_model("Faith + 1", "A Night With the Lord", "A Track")); my_list.Add(new sample_model("Faith + 1", "Touch Me Jesus", "A Track")); my_list.Add(new sample_model("Faith + 1", "I Found Jesus (With Someone Else)", "A Track")); my_list.Add(new sample_model("Faith + 1", "Savior Self", "A Track")); my_list.Add(new sample_model("Faith + 1", "Christ What a Day", "A Track")); my_list.Add(new sample_model("Faith + 1", "Three Times My Savior", "A Track")); my_list.Add(new sample_model("Faith + 1", "Jesus Touched Me", "A Track")); my_list.Add(new sample_model("Faith + 1", "Lord is my Savior", "A Track")); my_list.Add(new sample_model("Faith + 1", "I Wasn't Born Again Yesterday", "A Track")); my_list.Add(new sample_model("Faith + 1", "Pleasing Jesus", "A Track")); my_list.Add(new sample_model("Faith + 1", "Jesus (Looks Kinda Hot)", "A Track")); my_list.Add(new sample_model("Butters", "What What", "B Track")); return my_list; } public ICommand SimpleCommand { get; set; } public ObservableCollection DataSource{ get; set; } } 

Infine, consente di colbind ListView al nostro ViewModel che dovrebbe associare “Artist, Song e Button (Command & CommandParamters)”. Solitamente lo faccio nella funzione di caricamento di ogni pagina.

 private void Page_Loaded(object sender, RoutedEventArgs e) { sample_viewmodel viewmodel = new sample_viewmodel(); // create the view model myListView.DataContext = viewmodel; // set the datacontext (this will link the commands) myListView.ItemsSource = viewmodel.DataSource; // set the ItemsSource, this will link the Artist,Songs } 

Ce l’hai, ogni volta che l’utente fa clic sul pulsante, indipendentemente dalla piattaforma, eseguirà la funzione Comando.

Schermata di esempio inserisci la descrizione dell'immagine qui