无法创建“ViewModelLocator”的实例

时间:2011-12-28 17:08:14

标签: windows-phone-7 silverlight-4.0 mvvm mvvm-light blend

我一直在Visual Studio 2010和Blend 4中的Silverlight 4 Windows Phone 7项目中使用MVVM Light。 然后突然我开始在VS 2010和Blend中获得“无法创建”ViewModelLocator“”错误的实例。无法解决为什么它现在应该出现。关于我如何能够追踪到某些地方已发生变化但我没有发现的任何想法。 我做出的唯一改变,然后放回去,就是在其中一个用户控件中添加数据上下文表达式的“d:”。我有设计绑定的想法,但在运行时以编程方式以延迟方式绑定。

我看到其他人发布了这个问题,但答案是指Blend中的一个错误,显然已经修复了。这也是在VS2010中出现的。

App.xaml看起来像

<Application x:Class="BillSplitter2.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
         xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
         mc:Ignorable="d"
         xmlns:vm="clr-namespace:BillSplitter2.ViewModel"
         xmlns:converters="clr-namespace:HardMediumSoft.WP7.Tools.Converters;assembly=HardMediumSoft.WP7.Tools">


<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Resources/ResourceDictionary1.xaml"/>
        </ResourceDictionary.MergedDictionaries>
        <!--Global View Model Locator-->
        <vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True"/>
        <!--Localization String Library-->
        <local:LocalizedStrings xmlns:local="clr-namespace:BillSplitter2.Utilities"
                                x:Key="LocalizedStrings" />
        <!--Converters -->
        <converters:FloatConverter x:Key="FloatConverter" />
        <converters:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter" />
        <converters:StringToBrush x:Key="StringToBrushConverter" />
    </ResourceDictionary>
</Application.Resources>


<Application.ApplicationLifetimeObjects>
    <!--Required object that handles lifetime events for the application-->
    <shell:PhoneApplicationService Launching="Application_Launching"
                                   Closing="Application_Closing"
                                   Activated="Application_Activated"
                                   Deactivated="Application_Deactivated" />
</Application.ApplicationLifetimeObjects>

2 个答案:

答案 0 :(得分:2)

感谢上面的建议,我开始研究我的ViewModel的构造函数。虽然我没有错误,但我确实发现belnd与事件监听器和处理程序有问题。

我正在使用

if (IsInDesignMode)
{
   //populate values here for blend
}
else
{
   //runtime initiation
}

为设计时填充一些值。我会通过设置属性在模型中启动值。在我开始根据属性更改添加更复杂的事件处理例程之前,这一切都很好。

为了纠正这种情况并恢复我的'可混合性',我做了两件事!

  1. 在IsDesignMode部分中设置私有字段而不是属性。这可以避免触发PropertyChanged事件。
  2. 在仍然存在问题的事件处理程序中添加了IsInDesignMode检测并跳过任何级联更新。
  3. 希望这有帮助!

答案 1 :(得分:1)

以前是answered here。验证在创建对象实例期间问题不是错误(构造函数等