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;
有什么不对?
答
我改变了我的服务到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; }
希望这有助于!
什么是你的OnPropertyChanged()方法? – slugster
@slugster var handler = PropertyChanged; if(handler!= null) handler(this,new PropertyChangedEventArgs(propertyName));' – GeralexGR