Как вызвать элемент события Clicked из ListView, который существует внутри другого ListView - PullRequest
1 голос
/ 19 июня 2019

Я создаю приложение Prism Xamarin Form, на моей странице у меня есть вложенные списки (4 уровня), проблема в том, что я не могу вызвать событие, когда я нажимаю на элемент внутри второго, третьего и четвертого уровняlistviews, событие работает только для listview верхнего уровня, зная, что 4 listview имеют одинаковый тип источника элемента.

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

1-

ItemSelected = {Binding SelectedItem}

2-

EventToCommandBehavior EventName = "ItemTapped" Command = "{Binding SelectCustomEntityCommand}" EventArgsConverter = "{converters: ItemTappedEventArgsConverter}"

Ниже приведены следующие кодыструктуры:

1 - класс CustomEntity

public class CustomEntity 
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool Expanded { get; set; }
    public List<CustomEntity> LevelTwo { get; set; }
    public List<CustomEntity> LevelThree { get; set; }
    public List<CustomEntity> LevelFour { get; set; }
}

2 - testNestedListViewsViewModel Class

public class testNestedListViewsViewModel : ViewModelBase
{
    public testNestedListViewsViewModel(INavigationService navigationService)
        : base(navigationService)
    {
        Title = "Test Nested Listviews";
        LevelOne = new ObservableCollection<CustomEntity>();
    }


    private ObservableCollection<CustomEntity> _LevelOne;
    public ObservableCollection<CustomEntity> LevelOne
    {
        get { return _LevelOne; }
        set { SetProperty(ref _LevelOne, value); }
    }

    private DelegateCommand<CustomEntity> _selectCustomEntity;
    public DelegateCommand<CustomEntity> SelectCustomEntityCommand => _selectCustomEntity ?? (_selectCustomEntity = new DelegateCommand<CustomEntity>(ShowCustomEntityDetails));

    private void ShowCustomEntityDetails(CustomEntity paramData)
    {
        var x = paramData;
    }



    public override void OnNavigatingTo(INavigationParameters parameters)
    {
        for (int i = 0; i < 10; i++)
        {
            LevelOne.Add(new CustomEntity() { Id = i + 1, Name = "Name " + (i + 1), Expanded = false });
        }
        foreach (var item in LevelOne)
        {
            item.LevelTwo = new List<CustomEntity>();
            item.LevelTwo.Add(new CustomEntity() { Id = 100, Name = "K", Expanded = false });
            item.LevelTwo.Add(new CustomEntity() { Id = 101, Name = "1", Expanded = false });
            item.LevelTwo.Add(new CustomEntity() { Id = 102, Name = "2", Expanded = false });
            item.LevelTwo.Add(new CustomEntity() { Id = 103, Name = "3", Expanded = false });
            item.LevelTwo.Add(new CustomEntity() { Id = 104, Name = "4", Expanded = false });
            item.LevelTwo.Add(new CustomEntity() { Id = 105, Name = "5", Expanded = false });
            foreach (var item2 in item.LevelTwo)
            {
                item2.LevelThree = new List<CustomEntity>();
                item2.LevelThree.Add(new CustomEntity() { Id = 200, Name = "BOK 1", Expanded = false });
                item2.LevelThree.Add(new CustomEntity() { Id = 201, Name = "BOK 2", Expanded = false });
                item2.LevelThree.Add(new CustomEntity() { Id = 202, Name = "BOK 3", Expanded = false });
                item2.LevelThree.Add(new CustomEntity() { Id = 203, Name = "BOK 4", Expanded = false });
                item2.LevelThree.Add(new CustomEntity() { Id = 204, Name = "BOK 5", Expanded = false });
                item2.LevelThree.Add(new CustomEntity() { Id = 205, Name = "BOK 6", Expanded = false });
            }
        }
    }

}

3 - файл XAML

      <Label Text="{Binding Title}" />

      <ListView Grid.Row="1"
                BackgroundColor="White"
                SeparatorColor="Gray"
                ItemsSource="{Binding LevelOne}"
                VerticalOptions="Fill">
          <ListView.Behaviors>
              <b:EventToCommandBehavior EventName="ItemTapped" 
                                        Command="{Binding SelectCustomEntityCommand}"
                                        EventArgsConverter="{converters:ItemTappedEventArgsConverter}" />
          </ListView.Behaviors>
          <ListView.ItemTemplate>
              <DataTemplate>
                  <ViewCell>
                      <Grid>
                          <Grid.RowDefinitions>
                              <RowDefinition Height="Auto"/>
                              <RowDefinition Height="Auto"/>
                          </Grid.RowDefinitions>
                          <Label Grid.Row="0" Text="{Binding Name}" TextColor="Blue"></Label>
                          <ListView Grid.Row="1"
                                BackgroundColor="White"
                                SeparatorColor="Gray"
                                ItemsSource="{Binding LevelTwo}"
                                VerticalOptions="Fill">       
                              <ListView.Behaviors>
                                  <b:EventToCommandBehavior EventName="ItemTapped" 
                                        Command="{Binding SelectCustomEntityCommand}"
                                        EventArgsConverter="{converters:ItemTappedEventArgsConverter}" />
                              </ListView.Behaviors>
                              <ListView.ItemTemplate>
                                  <DataTemplate>
                                      <ViewCell>
                                          <Grid>
                                              <Grid.RowDefinitions>
                                                  <RowDefinition Height="Auto"/>
                                                  <RowDefinition Height="Auto"/>
                                              </Grid.RowDefinitions>
                                              <Label Grid.Row="0" Text="{Binding Name}" TextColor="Red"></Label>

                                          </Grid>
                                      </ViewCell>
                                  </DataTemplate>
                              </ListView.ItemTemplate>
                          </ListView>
                      </Grid>
                  </ViewCell>
              </DataTemplate>
          </ListView.ItemTemplate>            

Я ожидал, когда я нажму на элемент во втором просмотре списка, чтобы вызвать событие с именем: «SelectCustomEntityCommand», но я заметилэто только первое представление списка уровня вызывает это событие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...