Xamarin-очистка выбора ListView



Я действительно работаю с этим фрагментом кода



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);
}
}
}


Этот код фактически показывает простое всплывающее меню, используя технологии Xamarin Forms.
В настоящее время я пытаюсь понять, как я мог бы легко очистить выбор ListView после того, как я выбрал, на какую страницу Я хочу перейти!



Я нашел этот фрагмент кода на веб-сайте Xamarin для разработчиков (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
};


Но я не могу. в настоящее время выяснить, как я должен интегрировать его с моим кодом выше там:)

622   3  

3 ответов:

Вы назначаете обработчик ItemSelected дважды, что является плохой идеей. Все, что вам нужно сделать, это добавить эту строку в существующий обработчик ItemSelected

  ((ListView)sender).SelectedItem = null; 

Я хотел бы добавить к ответу Джейсона, потому что в нем отсутствует некоторая жизненно важная информация. Если свойство ListView SelectedItem имеет значение null,оно снова инициирует событие ItemSelected. Поэтому, если у вас нет проверки null, он выдаст исключение.

Вот как это должно выглядеть:

void ItemSelected(object sender, EventArgs args)
{
    if (((ListView)sender).SelectedItem == null)
      return;
    //Do stuff here with the SelectedItem ...
    ((ListView)sender).SelectedItem = null;
}

У меня была та же самая проблема, но другие решения не работали для меня. Поскольку мне нужно было передать пользовательский объект на следующую страницу, я обнулил выбранную ссылку на элемент и использовал ссылку на элемент для моего пользовательского объекта.

listView.ItemTapped += async (sender, e) =>{

    await Navigation.PushAsync(new DetailPage(e.Item as CustomObject));
    ((ListView)sender).SelectedItem = null;

};

Comments

    Ничего не найдено.