简体   繁体   中英

How selected item MVVM listview - Xamarin form

how to select item in listview Mvvm my code did't working

my code Itemsource:

protected async override void OnAppearing()
    {
        base.OnAppearing();
        var allPersons = await firebaseHelper.GetAllCamps();
        lstCampus.ItemsSource = allPersons;
    }

my code selectedItem:

void OnItemTapped(object sender, System.EventArgs e)
    {
        if (lstCampus.SelectedItem != null)
            DisplayAlert("OnItemTapped", lstCampus.SelectedItem.ToString(), "OK");
    }

my model:

public class Campus
{
    public string NameCamp { get; set; }
}

my view model:

public async Task<List<Campus>> GetAllCamps()
    {

        return (await firebase
          .Child("Camps")
          .OnceAsync<Campus>()).Select(item => new Campus
          {
              NameCamp = item.Object.NameCamp
          }).ToList();
    }

Thank u

You can try to use behaviours. This will help you:

https://www.c-sharpcorner.com/article/xamarin-forms-eventtocommand-behavior-in-mvvm-viewmodel/

https://docs.microsoft.com/en-US/xamarin/xamarin-forms/app-fundamentals/behaviors/reusable/event-to-command-behavior

After that just add something like this to your list:

                <ListView.Behaviors>
                    <b:EventToCommandBehavior EventName="ItemTapped" Command="{Binding TappedCamp}" InputConverter="{StaticResource ItemTappedConverter}"/>
                </ListView.Behaviors>

Use List.ItemTapped or ListView.ItemSelected event, they are both raised when an item is selected.

ItemTapped

listview.ItemTapped += Listview_ItemTapped;
private void Listview_ItemTapped(object sender, ItemTappedEventArgs e)
    {
        DisplayAlert("OnItemTapped", (e.Item as Campus).NameCamp , "OK");
    }

ItemSelected

listview.ItemSelected += Listview_ItemSelected;

private void Listview_ItemSelected(object sender, SelectedItemChangedEventArgs e)
    {
        DisplayAlert("OnItemTapped", (e.SelectedItem as Campus).NameCamp, "OK");
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM