2013-07-25 4 views
2

바인딩, 내가 오류를 얻을WPF에서 Datagrid이 VICI의 coolstorage의 CSList 원인 캐스트 오류

유형의 개체를 캐스팅 할 수 없습니다 '으로 System.Object [] 'to type'Product [] '

바인딩 원본으로 사용할 수는 없지만 vici coolstorage의 거의 존재하지 않는 설명서에 따르면 해당 컬렉션이 있어야합니다. 바인딩에 적합합니다. 이 경우에도 가능하면

dataGrid1.ItemsSource = Product.List(); 

누군가가 말해 줄 수,하고 있는지, 내가 무슨 일을하고있는 중이 야 : 여기가 나타납니다 라인에 실패 할거야?

감사합니다.

[EDIT은 이러한 문제에 대한 해결책은 아니지만 다음 (약간 변경) 스택 트레이스

at Vici.CoolStorage.CSList`1.System.Collections.ICollection.CopyTo(Array array, Int32 index) in {...}\Vici.CoolStorage\Library\CSListGeneric.cs:line 1070 
    at System.Collections.ArrayList.InsertRange(Int32 index, ICollection c) 
    at System.Collections.ArrayList.AddRange(ICollection c) 
    at System.Collections.ArrayList..ctor(ICollection c) 
    at System.Windows.Data.BindingListCollectionView.RebuildListsCore() 
    at System.Windows.Data.BindingListCollectionView.RebuildLists() 
    at System.Windows.Data.BindingListCollectionView.<SubscribeToChanges>b__1f() 
    at MS.Internal.Data.SynchronizationInfo.AccessCollection(IEnumerable collection, Action accessMethod, Boolean writeAccess) 
    at System.Windows.Data.BindingOperations.AccessCollection(IEnumerable collection, Action accessMethod, Boolean writeAccess) 
    at System.Windows.Data.BindingListCollectionView.SubscribeToChanges() 
    at System.Windows.Data.BindingListCollectionView..ctor(IBindingList list) 
    at MS.Internal.Data.ViewManager.GetViewRecord(Object collection, CollectionViewSource cvs, Type collectionViewType, Boolean createView, Func`2 GetSourceItem) 
    at MS.Internal.Data.DataBindEngine.GetViewRecord(Object collection, CollectionViewSource key, Type collectionViewType, Boolean createView, Func`2 GetSourceItem) 
    at System.Windows.Data.CollectionViewSource.GetDefaultCollectionView(Object source, Boolean createView, Func`2 GetSourceItem) 
    at System.Windows.Data.CollectionViewSource.GetDefaultCollectionView(Object source, DependencyObject d, Func`2 GetSourceItem) 
    at System.Windows.Controls.ItemCollection.SetItemsSource(IEnumerable value, Func`2 GetSourceItem) 
    at System.Windows.Controls.ItemsControl.OnItemsSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e) 
    at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e) 
    at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args) 
    at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType) 
    at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal) 
    at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value) 
    at System.Windows.Controls.ItemsControl.set_ItemsSource(IEnumerable value) 
    at {...}.ViewProduct..ctor() in {...}\ViewProduct.xaml.cs:line 37 
    at {...}.MainWindow..ctor() in {...}\MainWindow.xaml.cs:line 26 
+0

스택 추적을 제공 할 수 있습니까? –

+0

스택 추적을 추가하기 위해 편집 된 질문 –

+0

아무도 아이디어가 없습니까? –

답변

1

이있어, 그 해결 방법이다. 게시물 here에 따르면

그들은 강력한 형식의하는 CopyTo 방법

영업에 전화를 원하기 때문에, 객체 [] 배열을 허용하지만,하지 않는해야 ICollection.CopyTo 방법을 이 포럼은 형식이 지정된 컬렉션의 명시 적으로 만든 배열 복사본에 바인딩하여이 문제를 해결했습니다.

대신

TestCollection c = new TestCollection(); 
c.Add(new Test()); 
comboBox1.DataSource = c; 
comboBox1.DisplayMember = "Text"; 

그는

을 사용
TestCollection c = new TestCollection(); 
c.Add(new Test()); 
Test[] arr = new Test[c.Count]; 
c.CopyTo(arr); 
comboBox1.DataSource = arr; 
comboBox1.DisplayMember = "Text"; 

내가 미봉책 해결을 필요로하지 않는 해결책을 가지고 싶지만, 그 동안이 적어도 과거의 저를 얻었다 문제 (다소 ORM의 기능 중 일부가 손상됨)

+0

"child collection"이 디자이너 (devexpress xtrareports)의 principal 객체와 동일한 속성을 보여 주므로 csoObject를 사용하여 CsObject를 보고서에서 one-to.many 관계로 사용하는 데 감사드립니다. 이제는 csobject.CopyTo (배열, 0) 보고서의 데이터 소스로, 잘 작동, 나는 지난 2 시간 그것으로 고민 ... – FabianSilva