[英]Cant insert a object into a silverlight databound combo box
直到最近,我還有一個組合框,該組合框已綁定到bind方法中的Linq查詢的IEnumerable的DataService.Obj類型,並且一切正常
private IEnumerable<DataService.Obj> _GeneralList;
private IEnumerable<DataService.Obj> _QueriedList;
private void Bind()
{
_GeneralList = SharedLists.GeneralList;
_QueriedList = _GeneralList.Where(q =>q.ID >1000);
cmbobox.ItemsSource = _QueriedList;
}
然后,我不得不更改方法以插入新的obj並將該對象設置為默認obj,現在我得到了“ System.NullReferenceException:對象引用未設置為對象的實例 ”異常。 我知道這與插入linq查詢的枚舉有關,但我無法解決。 任何幫助將不勝感激。
private IEnumerable<DataService.Obj> _GeneralList;
private IEnumerable<DataService.Obj> _QueriedList;
private void Bind()
{
_GeneralList = SharedLists.GeneralList;
_QueriedList = _GeneralList.Where(q =>q.ID >1000);
cmbobox.ItemsSource = _QueriedList;
DataService.Obj info = new DataService.Obj();
info.ID = "0";
(cmbobox.ItemsSource as ObservableCollection<DataService.Obj>).Insert(0,info);
cmbobox.SelectedIndex = 0;
}
提前致謝
這個表達:
(cmbobox.ItemsSource as ObservableCollection<DataService.Obj>)
將返回null。 ItemsSource
是曾經分配給它的東西。 在這種情況下,LINQ提供的對象實現IEnumerable<DataService.Obj>
因此as
返回null(LINQ不了解ObservableCollection<T>
並且肯定不使用它)。
請參閱此問題以創建ToObservableCollection
擴展方法。
那就是說,我會猜測您的實際目標是將“ <N/A>
”元素放在列表頂部嗎? 如果是這樣,請嘗試:
cmbobox.ItemsSource= Enumerable.Repeat(new DataService.Obj() {ID = 0}, 1)
.Union(_QueriedList));
這將作為ID為0的單個DataService.Obj
實例作為IEnumerable<DataService.Obj
的第一項插入,然后插入_QueriedList中的所有項。 無需嘗試使用此方法將值插入集合。
綁定到控件之前,請嘗試插入新項目。
private IEnumerable<DataService.Obj> _GeneralList;
private IEnumerable<DataService.Obj> _QueriedList;
private void Bind()
{
_GeneralList = SharedLists.GeneralList;
_QueriedList = _GeneralList.Where(q =>q.ID >1000).ToList();
DataService.Obj info = new DataService.Obj();
info.ID = "0";
_QueriedList.Insert(0,info);
cmbobox.ItemsSource = _QueriedList;
cmbobox.SelectedIndex = 0;
}
我不認為_GeneralList.Where將返回ObservableCollection
因此,當您在行上使用as進行投射時:(cmbobox.ItemsSource作為ObservableCollection).Insert(0,info);
您總是會得到一個空引用。 相反,您可以這樣做:
_GeneralList = SharedLists.GeneralList;
_QueriedList = _GeneralList.Where(q =>q.ID >1000);
// ***this line changed***
cmbobox.ItemsSource = new ObservableCollection<DataService.Obj>(_QueriedList);
DataService.Obj info = new DataService.Obj();
info.ID = "0";
(cmbobox.ItemsSource as ObservableCollection<DataService.Obj>).Insert(0,info);
cmbobox.SelectedIndex = 0;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.