2016-05-11 17 views
1

Ich versuche, ein IReadOnlyList eine Material Klasse zu binden, ich zu einem ComboBox gemacht, aber ich nicht einen Weg finden kann, das funktioniert zu machen.IReadOnlyList <T> zu Binding

var bList = new BindingList<Material>(listToBind); 

Das gibt mir Argument type 'System.Collections.Generic.IReadOnlyList<Data.Material>' is not assignable to parameter type 'System.Collections.Generic.IList<Data.Material>'

Muss ich es IList werfen müssen, oder gibt es eine andere Möglichkeit, dies zu erreichen?

+0

Von dort, wo Sie den IReadOnlyList bekommen? Kannst du direkt eine Liste bekommen? Wenn nicht, denke ich, dass Sie über die readonly das Hinzufügen der Elemente zu einer Liste iterieren sollten. –

Antwort

2

BindingList<T> hat keinen Konstruktor, der eine der Schnittstellen eine IReadOnlyList erweitert.

BindingList<T> hat zwei Konstruktoren (MSDN docs), eine ist leer, und die andere nimmt eine IList<T>. IReadOnlyList<T> erweitert jedoch IEnumerable<T>, was bedeutet, dass es die Funktion .ToList() bietet, die uns List<T> gibt, die wir verwenden können, um unsere BindingList<T> zu bevölkern.

Der endgültige Code würde dann wie folgt aussehen:

var bList = new BindingList<Material>(listToBind.ToList()); 
+0

Beachten Sie, dass dies nur funktioniert, wenn Sie 'using System.Linq' in Ihre Codedatei einfügen –

0

In MSDN:

Binding (IList)
Initialisiert eine neue Instanz der Binding Klasse mit der angegebenen Liste.

Sie brauchen also ein Objekt, das IList implementiert; IReadOnlyList nicht.

Sie könnten achive, was Sie mit dem folgenden Code wollen:

var bList = new BindingList<Material>(listToBind.ToList());