私は Windows 8 の "Metro Styled Apps"、MVVM Light を試していて、共有ターゲットを作成したいと思っています。しかし、OnShareTargetActivated メソッドを使用していて、ObservableCollection にアイテムを追加したい場合、クラス タイプと COM オブジェクトの間で InvalidCastException をキャッチします。
Das COM-Objekt des Typs "System.Collections.Specialized.NotifyCollectionChangedEventHandler" は、クラス内の "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 in Schnittstellen ist jedoch möglich, sofern die zugrunde liegende COM-Komponente QueryInterface-Aufrufe für die IID der Schnittstelle unterstützt.
英語版:
タイプ 'System.Collections.Specialized.NotifyCollectionChangedEventHandler' の COM オブジェクトをクラス タイプ 'System.Collections.Specialized.NotifyCollectionChangedEventHandler' にキャストできません。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.Collections.Specialized.NotifyCollectionChangedEventHandler.Invoke (オブジェクトの送信者、 NotifyCollectionChangedEventArgs
e)
で System.Collections.ObjectModel.ObservableCollection 1.InsertItem (Int32 インデックス、 T アイテム) System.Collections.ObjectModel.Collection`1.Add(T アイテム) で1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
at System.Collections.ObjectModel.ObservableCollection