2016-07-05 4 views
1

Ich arbeite daran, separate Ansichten für mobile Geräte zu erstellen, anstatt zusätzliche adaptive UI-Status für das Telefon zu verwenden. Ich bin in der Lage, dies zu erreichen, indem ich einen Unterordner in meinem Views Ordner DeviceFamily-Mobile hinzufüge und einen neuen View mit dem gleichen Namen wie dem, den ich überschreibe, hinzufüge.Hinzufügen von ViewModel zu Mobile View

Ich habe die folgenden View, die funktioniert und "MOBILE" auf einem mobilen Gerät/Emulator anzeigen.

<Page x:Class="MyApp.PayeesPage" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:behaviors="using:Template10.Behaviors" 
     xmlns:controls="using:Template10.Controls" 
     xmlns:core="using:Microsoft.Xaml.Interactions.Core" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:interactivity="using:Microsoft.Xaml.Interactivity" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:models="using:MyApp.Models" 
     xmlns:viewModels="using:MyApp.ViewModels" 
     xmlns:views="using:MyApp.Views" 
     mc:Ignorable="d"> 

    <RelativePanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
     <TextBlock x:Name="MobileTextBlock" 
        Foreground="{ThemeResource ForegroundColorBrush}" 
        Text="MOBILE" /> 
    </RelativePanel> 
</Page> 

Allerdings, wenn ich die DataContext zu setzen versuchen, mich nützlich zu tatsächlichen Anzeige etwas zu ermöglichen, etwa so:

<Page.DataContext> 
    <viewModels:PayeesPageViewModel x:Name="ViewModel" /> 
</Page.DataContext> 

Dann habe ich einen Fehler, wenn sie dem PayeesPage Navigation:

Das Objekt vom Typ 'Windows.UI.Xaml.Controls.TextBlock' konnte nicht in den Typ 'MyApp.ViewModels.PayeesPageViewModel' umgewandelt werden.

Dies ist die gleiche Art, wie ich die DataContext auf den ursprünglichen PayeesPage gesetzt und es funktioniert gut. Gibt es eine andere Möglichkeit, die DataContext auf diese alternativen View s zu setzen, oder fehle ich etwas?

Antwort

0

Es stellt sich heraus, dass das mobile View das gleiche x:Class wie das Original Page haben muss. ReSharper beschwerte sich, als ich versuchte, es MyApp.Views.PayeesPage zu nennen, weil das bereits existierte, also änderte ich es zu MyApp.PayeesPage. Aber als ich es zurückstellte, so dass beide das gleiche x:Class verwendeten, dann fing alles an, wie erwartet zu arbeiten.

Leider bekomme ich ein paar rote Squigglies von ReSharper, aber die Dinge funktionieren so, wie sie sein sollten. Nur für den Fall kommt jemand über diese Frage in die Zukunft:

Views/PayeesPage.xaml:

<Page x:Class="MyApp.Views.PayeesPage" 
...> 

Views/DeviceFamily-Mobile/PayeesPage.xaml:

<Page x:Class="MyApp.Views.PayeesPage" 
...> 
+0

thx Zum Teilen Ihrer Lösung gibt es viele Artikel, die über den Ordner DeviceFamily-Type sprechen, zum Beispiel http://igrali.com/2015/08/02/three-ways-to-set-specific-devicefamily-xaml-views-in -uwp/ –

+0

Das ist ein Eisartikel - wo ich viele meiner Informationen bekommen habe. Mein Problem war, dass keine der Informationen, die ich fand, darauf hinwies, dass die Ansichten die gleiche 'x: Klasse' teilen mussten, so dass die roten Squigglies von ReSharper in diesem Fall ein wenig irreführend waren. –