Estoy experimentando con Windows 8 "Metro Styled Apps", MVVM Light y quiero crear un objetivo compartido, hasta ahora, todo bien. Pero si estoy en el método OnShareTargetActivated y quiero agregar un elemento a un ObservableCollection, atrapo una InvalidCastException entre el tipo de clase y el objeto COM.InvalidCastException con destino compartido en Windows 8
Das COM-Objeto des Typs "System.Collections.Specialized.NotifyCollectionChangedEventHandler" kann nicht en el foso Klassentyp "System.Collections.Specialized.NotifyCollectionChangedEventHandler" umgewandelt werden. Instanzen von Typen, die COM-Komponenten repräsentieren, können nicht in andere Typen umgewandelt werden, die keine COM-Komponenten repräsentieren. Eine Umwandlung en Schnittstellen ist jedoch möglich, sofern die zugrunde liegende COM-Komponente QueryInterface-Aufrufe für die IID der Schnittstelle unterstützt.
Inglés Versión:
No se puede convertir objeto COM de tipo 'System.Collections.Specialized.NotifyCollectionChangedEventHandler' al tipo de clase 'System.Collections.Specialized.NotifyCollectionChangedEventHandler'. Las instancias de tipos que representan componentes COM no se pueden convertir a tipos que no representan componentes COM; sin embargo, se pueden convertir en interfaces siempre que el componente COM subyacente sea compatible con las llamadas a QueryInterface para el IID de la interfaz.
Ahora estoy un poco confundido y no sé cómo manejar este comportamiento correctamente.
MainViewModel main1 = new ViewModelLocator().Main;
MainViewModel main2 = new MainViewModel();
var conversation = new ConversationViewModel();
conversation.Messages.Add(new MessageViewModel { Image = img, Text = "Share" });
main1.Conversations.Add(conversation); // error InvalidCastException
main2.Conversations.Add(conversation); // no error
Dónde img
es una BitmapImage recién creado
ViewModelLocator
public class ViewModelLocator
{
/// <summary>
/// Initializes a new instance of the ViewModelLocator class.
/// </summary>
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<MainViewModel>();
SimpleIoc.Default.Register<UserViewModel>();
SimpleIoc.Default.Register<UriViewModel>();
}
public MainViewModel Main
{
get
{
return ServiceLocator.Current.GetInstance<MainViewModel>();
}
}
//...
}
Seguimiento de la pila:
en System.StubHelpers.StubHelpers.GetCOMIPFromRCW_WinRTDelegate (Objeto objSrc, IntPtr pCPCMD, IntPtr & ppTarget)
en System.Collections.Specialized.NotifyCollectionChangedEventHandler.Invoke (Object remitente, NotifyCollectionChangedEventArgs e)
en System.Collections.ObjectModel.ObservableCollection1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
1.InsertItem (Int32 índice, T elemento) en System.Collections .ObjectModel.Collection`1.Add (T artículo)
at System.Collections.ObjectModel.ObservableCollection
Espero que no te importe.Agregué la versión en inglés del mismo mensaje de excepción y el seguimiento de la pila a la pregunta. ¿Alguna vez resolviste esto? –
El error es sobre el contexto de llamada de la aplicación: los dos objetos tienen el mismo tipo, pero uno es un objeto com (compartir) y el otro un objeto ".net" (ViewModelLocaltor(). Main) - mixim juntos resultados en tales problemas ... – Philipp
Acabo de encontrarme con el mismo problema. ¿Alguien ha encontrado una resolución? – mztan