我正在创建一个Prism Xamarin Form应用程序,在我的页面中,我嵌套了列表视图(4个级别),问题是当我在第二,第三和第四级中点击一个项目时,我无法引发事件listviews,知道4个listview具有相同的项目源类型,该事件仅适用于顶级listview。
我搜索了很多有关如何在另一个父列表视图中存在的列表视图中点击项目时引发事件的方法,但没有得到适合我的情况的答案,我尝试使用方法:
1-
ItemSelected = {正在绑定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类
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”的事件时,我期望 但是我注意到只有第一级列表视图会引发该事件。