Windows应用商店应用MvvM Light对象与目标类型不匹配

时间:2013-02-04 10:35:14

标签: c# mvvm windows-store-apps

我遇到了与此处所述相同的问题http://mvvmlight.codeplex.com/workitem/7571我在github上创建了一个项目,您可以找到一个可以重现此问题的项目。该项目在https://github.com/WimTilburgs/WebShopV7

我的Xaml代码中提出问题的部分是这一部分:

<common:LayoutAwarePage.DataContext>
    <Binding 
             Path="Main"
             Source="{StaticResource Locator}" />
</common:LayoutAwarePage.DataContext>

一旦我打开页面就会出现此错误,当我重建它时会消失。在这种情况下,设计时数据不会显示在Visual Studio中。在Blend中没有问题,我可以看到设计时间数据。

提前谢谢

1 个答案:

答案 0 :(得分:0)

嗯,我遇到了类似的问题。奇怪的是,解决方案与Wim's正好相反。起初我在页面声明区域中使用了DataContext绑定:

<common:PageBase
    x:Class="Project.Pages.MainPage"
    x:Name="PageRoot"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Project"
    xmlns:common="using:Project.Common"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:ignore="http://www.ignore.com"
    mc:Ignorable="d ignore"
    DataContext="{Binding Main, Source={StaticResource Locator}}">

并且DataContext声明导致&#34; Object与目标类型不匹配。&#34;设计模式中的异常(构建和运行应用程序时没有错误)。在花了很多时间检查我的ViewModel,App.xaml等的每一行以找到错误后,我发现唯一的解决办法就是将绑定放到这个:

<common:PageBase.DataContext>
    <Binding Path="Main" Source="{StaticResource Locator}"></Binding>
</common:PageBase.DataContext>

然后重新编译。更奇怪的是,接下来我回到了原始数字,异常不再出现......

似乎改变绑定声明的区域就是这样或那样的伎俩。知道为什么会这样吗?

希望这篇文章可以节省其他人遇到同样问题的时间。