我正在试验Windows 8“Metro风格的应用程序”,MVVM Light并希望创建一个共享目标 - 迄今为止这么好。但是,如果我在OnShareTargetActivated方法中,并且想要将项添加到ObservableCollection,那么我会捕获类类型和COM对象之间的InvalidCastException。InvalidCastException与Windows 8上的共享目标
达斯COM-OBJEKT DES Typs “System.Collections.Specialized.NotifyCollectionChangedEventHandler” 卡恩nicht在书房Klassentyp “System.Collections.Specialized.NotifyCollectionChangedEventHandler” umgewandelt werden。 Instanzen von Typen,die COM-Komponenten repräsentieren,könnennicht in andere Typen umgewandelt werden,die keine COM-Komponentenrepräsentieren。 Eine Umwandlung in Schnittstellen ist jedochmöglich,sofern die zugrunde liegende COM-Komponente QueryInterface-Aufrufefürdie IID der Schnittstelle unterstützt。
英文版:
无法转换类型 'System.Collections.Specialized.NotifyCollectionChangedEventHandler' 类类型 'System.Collections.Specialized.NotifyCollectionChangedEventHandler' 的COM对象。表示COM组件的类型实例不能转换为不代表COM组件的类型;但只要底层COM组件支持对接口的IID的QueryInterface调用,它们就可以转换为接口。
现在我有点困惑,不知道如何正确处理这种行为。
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
凡img
是一个新创建的BitmapImage
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>();
}
}
//...
}
堆栈跟踪:
在 System.StubHelpers.StubHelpers.GetCOMIPFromRCW_WinRTDelegate(对象 objSrc,IntPtr的pCPCMD,IntPtr & ppTarget)
在 System.Collections.Specialized.NotifyCollectionChangedEventHandler.Invoke(对象 发件人,NotifyCollectionChangedEventArgs e)上System.Collections中
在System.Collections.ObjectModel.ObservableCollection1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
1.InsertItem(的Int32 索引,T项) .ObjectModel.Collection`1.Add(T 项目)
at System.Collections.ObjectModel.ObservableCollection
希望你不要介意。我已经为问题添加了相同异常消息和堆栈跟踪的英文版本。你有没有想过这个? –
错误是关于应用程序的调用上下文 - 两个对象具有相同类型,但一个是com对象(share),另一个是“.net”对象(ViewModelLocaltor()。Main) - 将它们混合在一起result在这样的问题.. – Philipp
我刚碰到相同的问题。有没有人找到解决方案? – mztan