ListView 中的 ListItems 不可点击
ListItems unclickable in Listview
所以我正在使用 Xamarin Forms 处理我的第一个项目,我遇到了一个问题:我的列表视图中的项目是 unclickable/Unselectable 在 Android 模拟器上。我不知道它是否适用于 iOS。希望大家帮帮我!
这是我所做的:
当用户在搜索栏中输入代码时,会将 observableCollection 中 objects 中的代码与搜索栏中的文本进行比较。如果它与任何 objects 中的任何代码相匹配,相关的 objects 将被放入我用于我的 Listview.ItemSource 的 IEnumerable<> 中。我能够显示 Collection,但是当我点击一个项目时,绝对没有任何反应。
重要说明:当我向某个项目发送垃圾邮件时它有时会起作用。
下面是视图中的匹配代码搜索方法:
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");
}
这是列表视图的 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));
}
提前致谢!
SelectedItem
是一个 属性,其中包含对当前所选项目的引用。 ItemSelected
是的事件,它在选择项目时会发射。
您想将事件处理程序分配给事件,而不是 属性。
此外,ListView
是可滚动的,因此在其中嵌套另一个可滚动元素不是一个好主意。
所以我正在使用 Xamarin Forms 处理我的第一个项目,我遇到了一个问题:我的列表视图中的项目是 unclickable/Unselectable 在 Android 模拟器上。我不知道它是否适用于 iOS。希望大家帮帮我!
这是我所做的: 当用户在搜索栏中输入代码时,会将 observableCollection 中 objects 中的代码与搜索栏中的文本进行比较。如果它与任何 objects 中的任何代码相匹配,相关的 objects 将被放入我用于我的 Listview.ItemSource 的 IEnumerable<> 中。我能够显示 Collection,但是当我点击一个项目时,绝对没有任何反应。
重要说明:当我向某个项目发送垃圾邮件时它有时会起作用。
下面是视图中的匹配代码搜索方法:
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");
}
这是列表视图的 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));
}
提前致谢!
SelectedItem
是一个 属性,其中包含对当前所选项目的引用。 ItemSelected
是的事件,它在选择项目时会发射。
您想将事件处理程序分配给事件,而不是 属性。
此外,ListView
是可滚动的,因此在其中嵌套另一个可滚动元素不是一个好主意。