2017-08-13 83 views
0

我想綁定一個列表視圖到我的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

回答

0

我改變了我的服務async數據源,最後我用:

構造

public ViewModel() 
{ 
    InitPages(); 
} 

異步的init()

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

根據發佈的代碼,您似乎試圖用空值初始化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

相關問題