ObservableCollection绑定异常 - ListView ItemSource Xamarin

问题描述:

我想绑定一个列表视图到我的viewmodel,但我得到ArgumentNullException。 我使用xamarin.forms,异常出现在android和ios项目中,但不在uwp中。ObservableCollection绑定异常 - ListView ItemSource Xamarin

当我使用视图模型绑定时,Itemsource会返回一个异常。当我在xaml中不使用绑定时,异常消失。

System.ArgumentNullException has been thrown 
Value cannot be null. 
Parameter name: element 

视图模型

private ObservableCollection<T> pages = new ObservableCollection<T>(); 

     public ObservableCollection<T> Pages 
     { 
      get { return pages; } 
      set 
      { 
       pages = value; 
       OnPropertyChanged("Pages"); 
      } 
     } 

VM构造

public ViewModel() 
{ 
    _service = new Service(); 
    someitems = _service.getitems(); 
    Pages = new ObservableCollection<T>(someitems);; 
} 

服务

return new ObservableCollection<T>(items);

查看

ItemsSource="{Binding Pages}" 

这个问题似乎是二传手pages = value;

有什么不对?

+0

什么是你的OnPropertyChanged()方法? – slugster

+0

@slugster var handler = PropertyChanged; if(handler!= null) handler(this,new PropertyChangedEventArgs(propertyName));' – GeralexGR

我改变了我的服务async数据源,最后我用:

构造

public ViewModel() 
{ 
    InitPages(); 
} 

异步的init()

private async void Init() 
{ 
    Pages = await ServiceFunction(); 
} 

根据发布的代码,您似乎试图用空值初始化Pages集合。

public ViewModel() 
{ 
    Pages = new ObservableCollection<T>(someitems);; 
} 

在您的ViewModel构造函数someitems似乎为null。我假设这是因为你使用的是Generics,那时你可能不知道类型会被使用。

如果你想/需要用你能做到传递参数的构造函数视图模型的值来初始化它:

public ViewModel(IList<T> someitems) 
{ 
    Pages = new ObservableCollection<T>(someitems); 
} 

注意:你并不需要创建一个后盾现场工作时使用自动属性就足够了,但是请注意,使用这个,你必须保留相同的实例,当你替换对象时,你将执行清除Clear()并添加Add()新项目。

public ObservableCollection<T> Pages { get; set; } 

希望这有助于!

+0

它看起来像'someitems'为null,但它不像我从调试中看到的那样。这个问题只出现在ios和android中,在uwp中,listview可以正常工作。我使用了笔记,但我遇到了同样的问题。 – GeralexGR

+1

如果您从集合初始化中删除'someitems'会发生什么?它崩溃了? – apineda

+0

不,它不。那么someitems是否为空? – GeralexGR