【问题标题】:ListItems unclickable in ListviewListView 中不可点击的 ListItems
【发布时间】:2020-11-28 19:12:37
【问题描述】:

所以我正在使用 Xamarin Forms 处理我的第一个项目,但遇到了一个问题:我的列表视图中的项目在 Android 模拟器上是不可点击/不可选择的。我不知道它是否适用于iOS。希望大家帮帮我!

这是我所做的: 当用户在搜索栏中输入代码时,来自 observableCollection 中的对象的代码将与搜索栏中的文本进行比较。如果它与来自任何对象的任何代码匹配,则相关对象将放入我用于 Listview.ItemSource 的 IEnumerable 中。我可以显示集合,但是当我点击一个项目时,绝对没有任何反应。

重要提示:当我向某个项目发送垃圾邮件时,它有时会起作用。

这是一个视图中的匹配代码搜索方法:

 async void Search(object sender, EventArgs e)
        {
            string CodeStr = RestoSearchBar.Text.ToLower();
            RestaurantListViewModel restaurantViewModel = new RestaurantListViewModel();
            var collec = restaurantViewModel.RestaurantCollector;
            IEnumerable<Restaurant> SearchResults = null;
            SearchResults = collec.Where(R => R.sCode.ToLower().Contains(CodeStr)).ToArray();

            if (SearchResults.Count() == 0)
            {
                await DisplayAlert(AppResources.Error, AppResources.ErrorMessage, "OK");
            }
            else
            {
                //Recherche dans la base de données
                await Navigation.PushAsync(new Page5_ListeRestau(CodeStr, SearchResults));
            }
        }

这是我传递 IEnumerable 参数的方式:


  public Page5_ListeRestau(string CodeResto, IEnumerable<Restaurant> SearchResults)
        {

            InitializeComponent();

            code = CodeResto;

            if (SearchResults != null)
            {
                SearchListView.ItemsSource = SearchResults;
            }
            else
            {
                DisplayAlert(AppResources.Error, AppResources.ErrorMessage, "OK");
            }

这是 Listview 的 XAML:

 <ListView
            x:Name="SearchListView"
            HasUnevenRows="true"
            Grid.Row="2" 
            HorizontalOptions="StartAndExpand" 
            VerticalOptions="StartAndExpand"
            SeparatorVisibility="Default"
            SelectedItem="SearchListView_ItemTapped"
            >
            
            <ListView.ItemTemplate>
                
                <DataTemplate>
                    <ViewCell>
                        <ScrollView>
                                <Grid Margin="0,20,0,0" x:Name="Items">

                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="70"/>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*"/>
                                </Grid.ColumnDefinitions>
                                    
                                    
                                <Image Grid.Column="0" HorizontalOptions="StartAndExpand" Source="{Binding sImage}" BackgroundColor="Transparent" HeightRequest="50"  />

                                <Grid Grid.Column="1" Margin="10,0,0,0">
                                <Label Grid.Row="0" TextDecorations="Underline" Text="{Binding sName}" FontSize="Large" TextColor="Black" Margin="10,0,0,0"/>
                                <Label Grid.Row="1" Text="{Binding sAddress}" Margin="10,0,0,0"/>
                                </Grid>

                                </Grid>

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

SearchListView_ItemTapped 方法的作用如下:

public void SearchListView_ItemTapped(object sender, ItemTappedEventArgs e)
        {
            var details = e.Item as Restaurant;

            Navigation.PushAsync(new Page1_menuNavig(details));
        }

提前致谢!

【问题讨论】:

  • SearchListView_ItemTapped 是做什么的?
  • 我不认为在您的单元格中使用 ScrollView 是最好的主意,这可能是您的问题的原因
  • @GeraldVersluis 是否有另一种方法可以在不牺牲滚动网格的能力的情况下做到这一点?
  • 首先,摆脱ScrollView,其次使用ItemSelected而不是SelectedItem
  • @Jason 哇,就是这么简单!谢谢:)

标签: listview xamarin.forms listviewitem selecteditem


【解决方案1】:

SelectedItem 是一个属性,其中包含对当前选定项的引用。 ItemSelected 是一个事件,在选择项目时触发。

您希望将事件处理程序分配给事件,而不是属性。

另外,ListView 是可滚动的,因此在其中嵌套另一个可滚动元素并不是一个好主意。

【讨论】:

    猜你喜欢
    • 2015-11-24
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多