【发布时间】:2018-03-21 19:20:55
【问题描述】:
我已经搜索 SO 和 xamarin 论坛几个小时了,但还没有找到适合我的解决方案。我正在开发一个使用包含用户名列表的列表视图的 xamarin 应用程序。当我点击用户时,我想要一张地图平移到该用户的位置。没问题,除了当列表中有重复项时,我无法弄清楚如何从列表视图中获取用户的索引。
我尝试过使用这个:
var index = usersInGroup.IndexOf(MyListView.SelectedItem.ToString());
但这会在我的列表中找到第一个索引并且没有给出准确的结果。 我还尝试实施在 https://forums.xamarin.com/discussion/41504/get-position-and-item-number-of-list-item 和 Xamarin Forms - Get position of item selected in Listview 以及其他一些来源中找到的解决方案。任何帮助深表感谢。以下是我目前用于列表视图的代码。仅供参考,这是我的第一个 xamarin 项目,我还在摸索中!
XAML:
<ListView x:Name="MyListView"
HorizontalOptions="Center"
ItemsSource="{Binding Items}"
RowHeight="55"
IsVisible="True"
x:FieldModifier="public"
CachingStrategy="RecycleElement"
Grid.Row="3"
Grid.ColumnSpan="2"
BackgroundColor="White">
<ListView.ItemTemplate>
<DataTemplate>
<TextCell Text="{Binding .}" TextColor="Black" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
C#:
public GroupPage ()
{
MyListView.ItemsSource = new ObservableCollection<string>(getUsers());
MyListView.ItemSelected += listMemberSelected;
}
private void listMemberSelected(object sender, EventArgs e)
{
//Doesn't work correctly when list contains duplicates
var index = usersInGroup.IndexOf(MyListView.SelectedItem.ToString());
}
如果我遗漏了您认为重要的任何细节,请告诉我。
【问题讨论】:
-
为什么列表中有重复项?我会考虑删除欺骗。
-
@RyanWilson 该列表由不唯一的用户名填充。用户可以添加他们想要的任何名称。我已经考虑过该解决方案,但这意味着重组数据库
-
您不必重组数据库,只需更改返回用户的查询以仅选择 DISTINCT 名称
-
为什么不能只使用 SelectedItem?为什么一定要有索引?
-
@RyanWilson 如果我这样做,我会从我的列表/地图中丢失共享相同用户名的用户