Xamarin ListView SelectedIndex,列表中有重复项

时间:2018-03-21 19:20:56

标签: c# listview xamarin

我一直在搜索SO和xamarin论坛几个小时,但还没有找到适合我的解决方案。我正在使用包含用户名列表的listview的xamarin应用。当我点击用户时,我想要一个地图平移到该用户位置。没问题,除了我无法弄清楚当列表中有重复项时如何从列表视图中获取用户的索引。

我试图使用它:

var index = usersInGroup.IndexOf(MyListView.SelectedItem.ToString());

但是这会在我的列表中找到第一个索引并且没有给出准确的结果。 我还尝试实施此处https://forums.xamarin.com/discussion/41504/get-position-and-item-number-of-list-itemXamarin Forms - Get position of item selected in Listview以及其他一些来源的解决方案。任何帮助深表感谢。下面是我目前为listview提供的代码。仅仅是一个FYI,这是我的第一个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());
}

如果我遗漏了您认为重要的任何详细信息,请告知我们。

1 个答案:

答案 0 :(得分:0)

不太理想,但我最终选择了一个网格,其控件是在运行时动态生成的。我把整个东西放在一个scrollview中,以使滚动类似于listview,用户名在按钮中填充行,并设置为与网格匹配。

XAML

            <ScrollView Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2">
            <Grid x:Name="grdMembersGrid" RowSpacing="0" BackgroundColor="Black" Grid.Row="2" Grid.ColumnSpan="2">
            </Grid>
        </ScrollView>

C#:

向网格添加任何内容

                MyButton groupMembers = new MyButton();

            //Change text to username
            groupMembers.Text = usersInGroup[i];
            groupMembers.HorizontalOptions = LayoutOptions.FillAndExpand;
            groupMembers.VerticalOptions = LayoutOptions.Center;
            groupMembers.TextColor = Color.Black;
            groupMembers.BackgroundColor = Color.White;
            groupMembers.Clicked += GroupMembers_Clicked;

            grdMembersGrid.Children.Add(groupMembers, 0, userRowIndex);

要获取按钮点击事件的行:

        var row = (int)((BindableObject)sender).GetValue(Grid.RowProperty);