我试图通过共享合同在Windows 8商店应用程序中接收共享文本。我可以收到文本,但如果文本进入可观察的集合,我得到一个com异常。如何接收共享文本并将其正确传递给便携式类库中的viewmodel?
便携式类库:
ViewModel.cs:
public class ViewModel
{
public ObservableCollection<string> Strings { get; private set; }
public ViewModel()
{
Strings = new ObservableCollection<string>
{
"one",
"two",
"three"
};
}
}
Locator.cs:
public class Locator
{
private static ViewModel vm;
public static ViewModel VM
{
get
{
if (vm == null)
{
vm = new ViewModel();
}
return vm;
}
}
}
Store App Project:
MainPage.xaml中
<Page...>
<Page.Resources>
<vm:Locator x:Key="Locator"/>
</Page.Resources>
<Grid ... DataContext="{Binding VM, Source={StaticResource Locator}}">
<ListBox ItemsSource="{Binding Strings}" .../>
</Grid>
</Page>
App.xaml.cs(缩写):
protected override async void OnShareTargetActivated(ShareTargetActivatedEventArgs args)
{
base.OnShareTargetActivated(args);
if (args.ShareOperation.Data.AvailableFormats.Contains("Text"))
{
var text = await args.ShareOperation.Data.GetTextAsync();
Locator.VM.Strings.Add(text);
}
}
上面的最后一行(Locator.VM.Strings.Add(text))抛出以下异常:
发生了类型为“System.InvalidCastException”的未处理异常 在mscorlib.dll中
附加信息:无法转换类型的COM对象 'System.Collections.Specialized.NotifyCollectionChangedEventHandler' 到班级类型 'System.Collections.Specialized.NotifyCollectionChangedEventHandler'。 无法转换表示COM组件的类型的实例 不代表COM组件的类型;但他们可以演员 只要底层COM组件支持接口 QueryInterface调用接口的IID。