私はWindows 8「Metro Styled Apps」、MVVM Lightを試しています。しかし、私がOnShareTargetActivatedメソッドに入っていてObservableCollectionにアイテムを追加したい場合は、クラスタイプとCOMオブジェクトの間にInvalidCastExceptionをキャッチします。Windows 8で共有ターゲットを持つInvalidCastException
ダスCOM-ObjektデTyps "System.Collections.Specialized.NotifyCollectionChangedEventHandler" カンNICHTデンでKlassentyp "System.Collections.Specialized.NotifyCollectionChangedEventHandler" umgewandelt werden。 COM-Komponentenの型式の型式は、型式の数値型ではなく、 keine COM-Komponentenrepräsentierenです。 には、Schnittstellen ist jedochmöglichには、のCOM-Komponente QueryInterface-Aufrufeを使用してください。 unterstützt。
英語版:
クラスタイプ 'System.Collections.Specialized.NotifyCollectionChangedEventHandler' にタイプ 'System.Collections.Specialized.NotifyCollectionChangedEventHandler' のCOMオブジェクトをキャストすることができません。 COMコンポーネントを表す型のインスタンスは、COMコンポーネントを表さない型にはキャストできません。基になるCOMコンポーネントがインターフェイスのIIDのQueryInterface呼び出しをサポートしている限り、インターフェイスにキャストできます。
今、私はちょっと混乱しており、この動作を正しく処理する方法がわかりません。
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>();
}
}
//...
}
スタックトレースです
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
: で
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
あなたは気にしません。同じ例外メッセージの英語版を追加し、質問にスタックトレースを追加しました。あなたはこれを理解したことがありますか? –
エラーはアプリケーションの呼び出しコンテキストに関するもので、2つのオブジェクトは同じタイプですが、1つはcomオブジェクト(共有)で、もう1つは ".net"オブジェクト(ViewModelLocaltor()。Main)そのような問題で。 – Philipp
私はちょうど同じ問題に遭遇した。誰も解決策を見つけましたか? – mztan