Я создаю приложение 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», но я заметилэто только первое представление списка уровня вызывает это событие.