Win8与便携式类库共享合同

时间:2013-08-05 02:11:47

标签: mvvm windows-store-apps portable-class-library

我试图通过共享合同在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。

0 个答案:

没有答案