2

如何在 listview Mvvm 中选择项目我的代码不起作用

我的代码项目来源:

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

我的代码selectedItem:

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

我的模型:

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

我的视图模型:

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

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

感谢你

4

2 回答 2

3

您可以尝试使用行为。这将帮助您:

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

之后,只需将这样的内容添加到您的列表中:

                <ListView.Behaviors>
                    <b:EventToCommandBehavior EventName="ItemTapped" Command="{Binding TappedCamp}" InputConverter="{StaticResource ItemTappedConverter}"/>
                </ListView.Behaviors>
于 2020-04-21T09:45:19.057 回答
-1

使用List.ItemTappedListView.ItemSelected事件,它们都在选择项目时引发。

ItemTapped

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

项目选择

listview.ItemSelected += Listview_ItemSelected;

private void Listview_ItemSelected(object sender, SelectedItemChangedEventArgs e)
    {
        DisplayAlert("OnItemTapped", (e.SelectedItem as Campus).NameCamp, "OK");
    }
于 2020-04-21T10:47:25.603 回答