¿Cómo puedo convertir en un ObservableCollection

Como puedo lanzar

from ObservableCollection into ObservableCollection 

esto no me funciona

 (ObservableCollection)myTabItemObservableCollection 

deberias copiar asi

 return new ObservableCollection(myTabItemObservableCollection); 

Básicamente, no puedes. No ahora, y no en .NET 4.0 .

¿Cuál es el contexto aquí? ¿Que necesitas? LINQ tiene Cast que puede obtener los datos como una secuencia , o existen algunos trucos con métodos generics (es decir, Foo(ObservalbleCollection col) etc.).

¿O simplemente puedes usar el IList no genérico?

 IList untyped = myTypedCollection; untyped.Add(someRandomObject); // hope it works... 

podría usar IEnumerable.Cast()

Usted no puede ObservableCollection no se deriva de ObservableCollection .

Si explica por qué querría tal vez podamos señalar una interfaz alternativa que puede usar.

Gracias por todas las respuestas, pero creo que he resuelto este problema con un “modo de ayuda”.

Quizás tenga algún método mejor o una statement linq para esto.

 private void ConvertTabItemObservableCollection() { Manager manager = this.container.Resolve(); foreach (var tabItem in manager.ObjectCollection) { TabItemObservableCollection.Add((TabItem)tabItem); } } 

Ninguno de los ejemplos que he encontrado han funcionado para mí, he recostackdo el código de abajo y parece funcionar. Tengo una jerarquía que se crea mediante la deserialización de un archivo XML y puedo recorrer todos los objetos de la jerarquía, pero puede adaptar esto a solo un bucle a través de una colección Observable y obtener los objetos como objetos y no muy tipados.

Quiero agregar un PropertyChangingEventHandler a cada propiedad en la jerarquía para poder implementar la funcionalidad de deshacer / rehacer.

 public static class TraversalHelper { public static void TraverseAndExecute(object node) { TraverseAndExecute(node, 0); } public static void TraverseAndExecute(object node, int level) { foreach (var property in node.GetType().GetProperties()) { var propertyValue = node.GetType().GetProperty(property.Name).GetGetMethod().Invoke(node, null); // Get the value of the property if (null != propertyValue) { Console.WriteLine("Level=" + level + " : " + property.Name + " :: " + propertyValue.GetType().Name); // For debugging if (property.PropertyType.IsGenericType && property.PropertyType.GetGenericTypeDefinition() == typeof(ObservableCollection<>)) // Check if we are dealing with an observable collection { //var dummyvar = propertyValue.GetType().GetMethods(); // This was just used to see which methods I could find on the Collection Int32 propertyValueCount = (Int32)propertyValue.GetType().GetMethod("get_Count").Invoke(propertyValue, null); // How many objects in the collection level++; for (int i = 0; i < propertyValueCount; i++) // Loop over all objects in the Collection { object properyValueObject = (object)propertyValue.GetType().GetMethod("get_Item").Invoke(propertyValue, new object[] { i }); // Get the specified object out of the Collection TraverseAndExecute(properyValueObject, level); // Recursive call in case this object is a Collection too } } } } } } 

El método se llama así.

 TraversalHelper.TraverseAndExecute(object); 

Si solo desea crear una colección de objetos, solo necesita este bit de código

 ObservableCollection typedField = migration.FileDescriptions[0].Inbound[0].Tables[0].Table[0].Fields[0].Field; // This is the strongly typed decalaration, a collection of Field objects object myObject = typedField; // Declare as object Int32 propertyValueCount = (Int32)myObject.GetType().GetMethod("get_Count").Invoke(myObject, null); // How many objects in this Collection for (int i = 0; i < propertyValueCount; i++) // Loop over all objects in the Collection { object properyValueObject = (object)myObject.GetType().GetMethod("get_Item").Invoke(myObject, new object[] { i }); // Get the specified object out of the Collection, in this case a Field object // Add the object to a collection of objects, or whatever you want to do with object }