2013-05-13 6 views
6

Kiedy dodaję pakiet MVVM Light przez NuGet, pojawiają się błędy odnoszące się do linii w pliku App.xaml dodanym podczas instalacji. Te błędy pojawiają się tylko w projektach Windows Phone 8. Dokładnie takie same wiersze w projekcie Windows Phone 7 nie powodują żadnych błędów. MVVM Światło dodaje linie są:Błędy w App.xaml próbującym użyć MVVM Light w Windows Phone 8 project

<ResourceDictionary> 
    <vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" /> 
    <ResourceDictionary.MergedDictionaries></ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 

Te linie są umieszczone tuż przed kończącym </Application.Resources> znaczników. Błędy zgłaszane w oknie listy błędów są:

  • Każdy słownik musi posiadać odpowiedni klawisz
  • Nazwa „ViewModelLocator” nie istnieje w przestrzeni nazw „clr-namespace: sdkVoiceAlarmClockWP8CS.ViewModel”

Wydaje się to mieć sens, ponieważ znacznik ResourceDictionary > ResourceDictionary > nie ma atrybutu klucza. Jednak jeśli spróbuję przenieść ten blok linii poza blok , otrzymuję zupełnie nowy zestaw błędów.

Jeśli chodzi o problem ViewModelLocator obawia się, że dwukrotnie sprawdzane i następujących nazw zostanie dodany do <Application> tag jako atrybut, a to nie jest oznaczony z jakimikolwiek błędami:

xmlns:vm="clr-namespace:sdkVoiceAlarmClockWP8CS.ViewModel" mc:Ignorable="d" 

Dlaczego ten sam zestaw linii działa dobrze w projekcie Windows Phone 7 i jak mogę naprawić problemy przestrzeni nazw, które mam w moim projekcie Windows Phone 8?

Tylko w przypadku wynika to z bardziej złożonym problemem tutaj jest cała App.xaml file:

<?xml version="1.0" encoding="utf-8"?> 
<!-- 
    Copyright (c) 2012 Microsoft Corporation. All rights reserved. 
    Use of this sample source code is subject to the terms of the Microsoft license 
    agreement under which you licensed this sample source code and is provided AS-IS. 
    If you did not accept the terms of the license agreement, you are not authorized 
    to use this sample source code. For the terms of the license, please see the 
    license agreement between you and Microsoft. 

    To see all Code Samples for Windows Phone, visit http://go.microsoft.com/fwlink/?LinkID=219604 
--> 
<Application x:Class="AlarmClockWithVoice.App" 
      xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" 
      xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" 
      xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit" 
      xmlns:telerikPrimitives="clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls.Primitives" 
      xmlns:p1="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:vm="clr-namespace:sdkVoiceAlarmClockWP8CS.ViewModel" mc:Ignorable="d" 
      > 

    <!--Application Resources--> 
    <Application.Resources> 
     <Style x:Key="TransitionPageStyle" TargetType="phone:PhoneApplicationPage"> 
      <Setter Property="toolkit:TransitionService.NavigationInTransition"> 
       <Setter.Value> 
        <toolkit:NavigationInTransition> 
         <toolkit:NavigationInTransition.Backward> 
          <toolkit:TurnstileTransition Mode="BackwardIn" /> 
         </toolkit:NavigationInTransition.Backward> 
         <toolkit:NavigationInTransition.Forward> 
          <toolkit:TurnstileTransition Mode="ForwardIn" /> 
         </toolkit:NavigationInTransition.Forward> 
        </toolkit:NavigationInTransition> 
       </Setter.Value> 
      </Setter> 
      <Setter Property="toolkit:TransitionService.NavigationOutTransition"> 
       <Setter.Value> 
        <toolkit:NavigationOutTransition> 
         <toolkit:NavigationOutTransition.Backward> 
          <toolkit:TurnstileTransition Mode="BackwardOut" /> 
         </toolkit:NavigationOutTransition.Backward> 
         <toolkit:NavigationOutTransition.Forward> 
          <toolkit:TurnstileTransition Mode="ForwardOut" /> 
         </toolkit:NavigationOutTransition.Forward> 
        </toolkit:NavigationOutTransition> 
       </Setter.Value> 
      </Setter> 
     </Style> 
     <ResourceDictionary> 
      <vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" /> 
      <ResourceDictionary.MergedDictionaries></ResourceDictionary.MergedDictionaries> 
     </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> 

</Application> 

Odpowiedz

2

miałem ten problem przed. Aby pracować w WP8 zastąpić to:

<ResourceDictionary> 
    <vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" /> 
    <ResourceDictionary.MergedDictionaries></ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 

Wystarczy to:

<vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" /> 

Ale nie przeszkadza, dlaczego to działa na WP7 ale nie WP8

+1

Wygląda na to, że MVVM Light potrzebuje zaktualizować skrypty NuGet. –

+0

gość, którego kołyszesz :). –

0

Włóż wszystko do ResourceDictionary zamiast w ApplicationResources ze wszystkimi niezbędnymi przestrzeniami nazw, jak wspomniano już w tym stackoverflow question.