Observablecollection索引和listview xamarin表单

Observablecollection索引和listview xamarin表单,listview,xamarin.forms,observablecollection,indexof,listviewitem,Listview,Xamarin.forms,Observablecollection,Indexof,Listviewitem,不顾一切地试图获取listview的索引,该索引由来自单独viewmodel类的可观察集合提供 在我的主页上,它保存着listview xaml(称为“mainlist”),我有一个onitemselected方法,它需要给我索引 到目前为止,我都试过了,一点运气都没有 这是唯一适用的代码,但它也给了我null reference expection: int index = (mainlist.ItemsSource as List<MainListItem>

不顾一切地试图获取listview的索引,该索引由来自单独viewmodel类的可观察集合提供

在我的主页上,它保存着listview xaml(称为“mainlist”),我有一个onitemselected方法,它需要给我索引

到目前为止,我都试过了,一点运气都没有

这是唯一适用的代码,但它也给了我null reference expection:

            int index = (mainlist.ItemsSource as List<MainListItem>).IndexOf(e.SelectedItem as MainListItem);
int index=(mainlist.ItemsSource as List).IndexOf(e.SelectedItem as MainListItem);
表示对象引用未设置为对象的实例

我错过了什么

这是创建observablecollection的mainviewmodel.cs

private ObservableCollection<MainListItem> _list;

        public ObservableCollection<MainListItem> List
        {
            get { return _list; }
            set
            {
                _list = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(List)));
            }
        }
private observeCollection\u列表;
公共可观测收集列表
{
获取{return\u list;}
设置
{
_列表=值;
PropertyChanged?.Invoke(这是新的PropertyChangedEventArgs(名称(列表));
}
}

最终,我通过循环遍历整个列表并计算我自己的索引来解决这个问题,如下所示:我知道一定有更好的方法,但由于我的列表相对较小,这对我很有用

int index = 0;
int i = 1;

foreach (MainListItem itemtocheck in mainlist.ItemsSource as ObservableCollection<MainListItem>)
                {
                    if(itemtocheck == e.SelectedItem)
                    {
                        index = i;
                        Debug.WriteLine("Index is " + index);
                        break;
                    }
                    else
                    {

                        Debug.WriteLine("No match for index at " + i);
                        i++;
                    }

                }
int索引=0;
int i=1;
foreach(MainListItem项检查mainlist.itemsource作为可观察集合)
{
if(itemtocheck==e.SelectedItem)
{
指数=i;
Debug.WriteLine(“索引为”+索引);
打破
}
其他的
{
Debug.WriteLine(“索引在“+i”处不匹配);
i++;
}
}

不要使用ItemsSource,而是尝试使用对分配给ItemsSource的实际列表的引用可能是重复的。我该怎么做?列表是在另一个类中创建的。@fredrik--完全不同。在标记副本之前,请先检查!此外,在c#中,空指针仍然是空指针-请将其分解并调试。