Вы не можете разыграть его, однако один из подходов - обернуть вашу итерацию, которую, как я знаю, вы хотите избежать, но, к сожалению, не можете использовать метод расширения .
public static class CollectionExtensions
{
public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> enumerableList)
{
if (enumerableList != null)
{
//create an emtpy observable collection object
var observableCollection = new ObservableCollection<T>();
//loop through all the records and add to observable collection object
foreach (var item in enumerableList)
observableCollection.Add(item);
//return the populated observable collection
return observableCollection;
}
return null;
}
}
Позволить вам сделать что-то вроде ...
ObservableCollection<IMusicalInstrument> InstrumentList = MyListBox.ItemsSource.ToObservableCollection<IMusicalInstrument>();
... что я и думаю, что вы после.
Вы также можете просто передать ссылку IEnumerable<T>
в конструктор ObservableCollection<T>
...
ObservableCollection<IMusicalInstrument> InstrumentList = new ObservableCollection<IMusicalInstrument>(MyListBox.ItemsSource);