Xamarin - compensation ListView sélection

Je suis en train de travailler avec ce morceau de code

using System;
using Xamarin.Forms;
using System.Diagnostics;
namespace CryptoUI
{
public class HomePage : Xamarin.Forms.MasterDetailPage
{
public HomePage()
{
//Set up the Master, i.e. the Menu
Label header = new Label
{
Text = "MENU",
Font = Font.SystemFontOfSize(20, FontAttributes.Bold),
HorizontalOptions = LayoutOptions.Center
};
//create an array of the Page names
string[] myPageNames = {
"Main",
"Page 2",
"Page 3",
};
//Create ListView for the Master page.
ListView listView = new ListView
{
ItemsSource = myPageNames,
};
//The Master page is actually the Menu page for us
this.Master = new ContentPage
{
Title = "Test",
Content = new StackLayout
{
Children = 
{
header, 
listView
},
}
};
//Define a selected handler for the ListView contained in the Master (ie Menu) Page.
listView.ItemSelected += (sender, args) =>
{
//Set the BindingContext of the detail page.
this.Detail.BindingContext = args.SelectedItem;
string currentPage = this.GetType().Name.ToString();
//This is where you would put your “go to one of the selected pages”
if(listView.SelectedItem.Equals("Main") && !currentPage.Equals("HomePage")){
AsyncPush(new HomePage());
}
else if(listView.SelectedItem.Equals("Page 2") && !currentPage.Equals("SecondPage")){
AsyncPush(new SecondPage());
}
else if(listView.SelectedItem.Equals("Page 3") && !currentPage.Equals("ThirdPage")){
AsyncPush(new ThirdPage());
}               
//Show the detail page.
this.IsPresented = false;
};
listView.ItemSelected += (senders, e) => {
if (e.SelectedItem == null) return; //don't do anything if we just de-selected the row
//do something with e.SelectedItem
((ListView)senders).SelectedItem = null; //de-select the row
};
//Set up the Detail, i.e the Home or Main page.
Label myHomeHeader = new Label
{
Text = "Home Page",
HorizontalOptions = LayoutOptions.Center
};
string[] homePageItems = { "Alpha", "Beta", "Gamma" };
ListView myHomeView = new ListView {
ItemsSource = homePageItems,
};
var myHomePage = new ContentPage();
myHomePage.Content = new StackLayout
{
Children = 
{
myHomeHeader, 
myHomeView
} ,
};
this.Detail = myHomePage;
}
public async void AsyncPush(Page page)
{
await Navigation.PushAsync(page);
}
}
}

Ce code montre, en réalité, un simple menu Déroulant, à l'aide de la Xamarin Forms technologies.
Je suis en train d'essayer de comprendre comment je pouvais facilement effacer la liste de sélection, après j'ai sélectionné la page que je veux à la tête de!

J'ai trouvé ce bout de code sur Xamarin du site web pour les devs (http://developer.xamarin.com/guides/cross-platform/xamarin-forms/working-with/listview/);

listView.ItemSelected += (sender, e) => {
if (e.SelectedItem == null) return; //don't do anything if we just de-selected the row
//do something with e.SelectedItem
((ListView)sender).SelectedItem = null; //de-select the row
};

Mais je ne peux pas actuellement de comprendre comment je doit l'intégrer à mon code ci-dessus 🙂

D'abord, vous n'aurez pas besoin de séparer ItemSelected événements pour ce faire. Je pense que vous pouvez simplement appeler cette listview.SelectedItem = null pour réinitialiser la liste de propriété selecteditem. Que ce soit avant ou après que vous appuyez sur la nouvelle page. Deuxièmement, il pourrait être préférable d'utiliser ItemTapped pour commencer la page de la transition et de l'utilisation itemselected pour traiter et transmettre les données à la vue suivante.

OriginalL'auteur Guido Magrin | 2014-12-05