InvalidCastException с целью общего доступа в Windows 8
м экспериментирую с Windows 8 "Metro Styled Apps », MVVM Свет и хотите создать цель для обмена - пока все хорошо. Но если яЯ в методе OnShareTargetActivation и хочу добавить элемент в коллекцию ObservableCollection. Я ловлю исключение InvalidCastException между типом класса и объектом COM.
Das COM-Objekt des Typs "System.Collections.Specialized.NotifyCollectionChangedEventHandler» Канн Нихт в ден Классентип "System.Collections.Specialized.NotifyCollectionChangedEventHandler» Умгевандельт Верден 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öбезукоризненно, безукоризненно, без сомнения COM-Komponente QueryInterface-Aufrufe füIID der Schnittstelle unterstüTZT.
Английская версия:
Невозможно привести COM-объект типа 'System.Collections.Specialized.NotifyCollectionChangedEventHandler» к типу класса "System.Collections.Specialized.NotifyCollectionChangedEventHandler», Экземпляры типов, которые представляют компоненты COM, не могут быть преобразованы в типы, которые не представляют компоненты COM; однако они могут быть преобразованы в интерфейсы, если базовый компонент COM поддерживает вызовы QueryInterface для IID интерфейса.
Теперь я немного смущен и нене знаю, как правильно обращаться с этим поведением.
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
{
///
/// Initializes a new instance of the ViewModelLocator class.
///
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register();
SimpleIoc.Default.Register();
SimpleIoc.Default.Register();
}
public MainViewModel Main
{
get
{
return ServiceLocator.Current.GetInstance();
}
}
//...
}
Трассировки стека:
at System.StubHelpers.StubHelpers.GetCOMIPFromRCW_WinRTDelegate (Объект objSrc, IntPtr pCPCMD, IntPtr & ppTarget)
в System.Collections.Specialized.NotifyCollectionChangedEventHandler.Invoke (Отправитель объекта, NotifyCollectionChangedEventArgs e)
в System.Collections.ObjectModel.ObservableCollection1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)<br><br>at System.Collections.ObjectModel.ObservableCollection
1.InsertItem (индекс Int32, элемент T) в System.Collections.ObjectModel.Collection`1.Add (элемент T)