2017-04-09 1 views
0

J'ai téléchargé un exemple du framework MVVMcross que vous pouvez trouver here. Lorsque je compile le projet UWP, il compile et s'exécute sans erreur.D'où vient cette variable? Exemple de framework MVVMcross UWP

Maintenant, j'essaie de refaire le projet UWP et je suis confronté à un problème qui se trouve dans le fichier suivant: XPlatformMenus/XPlatformMenus.UWP/Views/Home/HomeView.xaml.cs.

Aux lignes 11 et 12, la classe appelle un retour de base.Viewmodel. Question: D'où vient cette propriété?

Mon processus de réflexion:

De ma compréhension de l'application tente de retourner une propriété nommée ViewModel de la classe HomeViewModel.

Mais lorsque vous vérifiez la classe HomeViewModel: XPlatformMenus/XPlatformMenus.Core/ViewModels/Home/HomeViewModel.cs (situé dans un projet différent, les références sont faites) il n'y a pas de propriété ViewModel.

Bien le HomeViewModel hérite de BaseViewModel: XPlatformMenus/XPlatformMenus.Core/ViewModels/Base/BaseViewModel.cs mais il n'existe aucune propriété appelée ViewModel. BaseViewModel hérite de MvxViewModel et c'est de là que ça doit venir! Eh bien non, je considère la classe MvxViewModel avec Visual Studio je reçois ce à partir des métadonnées:

namespace MvvmCross.Core.ViewModels { 

    public abstract class MvxViewModel : MvxNavigatingObject, IMvxViewModel 
    { 
     protected MvxViewModel(); 

     public MvxRequestedBy RequestedBy { get; set; } 

     public void Init(IMvxBundle parameters); 
     public void ReloadState(IMvxBundle state); 
     public void SaveState(IMvxBundle state); 
     public virtual void Start(); 
     protected virtual void InitFromBundle(IMvxBundle parameters); 
     protected virtual void ReloadFromBundle(IMvxBundle state); 
     protected virtual void SaveStateToBundle(IMvxBundle bundle); 
    } 
} 

Ce ne possède une propriété ViewModel ... Quand j'utilise la fonction « Aller à la définition » sur la propriété ViewModel dans Visual Studio elle me conduit à MvxWindowsPage:

using MvvmCross.Core.ViewModels; 
using MvvmCross.Core.Views; 
using MvvmCross.Platform.Core; 
using MvvmCross.WindowsUWP.Views.Suspension; 
using Windows.UI.Xaml.Controls; 
using Windows.UI.Xaml.Navigation; 

namespace MvvmCross.WindowsUWP.Views 
{ 
    public class MvxWindowsPage : Page, IMvxWindowsView, IMvxView, IMvxDataConsumer 
    { 
     public MvxWindowsPage(); 

     public IMvxWindowsFrame WrappedFrame { get; } 
     public IMvxViewModel ViewModel { get; set; } 
     protected IMvxSuspensionManager SuspensionManager { get; } 

     public void ClearBackStack(); 
     protected virtual IMvxBundle LoadStateBundle(NavigationEventArgs e); 
     protected override void OnNavigatedFrom(NavigationEventArgs e); 
     protected override void OnNavigatedTo(NavigationEventArgs e); 
     protected virtual void SaveStateBundle(NavigationEventArgs navigationEventArgs, IMvxBundle bundle); 
    } 
} 

Qui, en effet, a une propriété ViewModel. Mais je ne comprends pas comment HomeView sait à propos de cette classe parce que je ne vois pas où elle est définie dans le chemin hérité.

+0

Salut Rufo, merci pour votre réponse. J'avais d'abord inséré un mauvais lien (vers le projet WPF au lieu de UWP). Cela vous dérange-t-il de le regarder de plus près :-) –

+1

Jetez un coup d'œil au fichier HomeView.xaml. Vous le verrez dériver de BaseView –

Répondre

2

base.ViewModel fait référence à la classe HomeView (dans laquelle elle est utilisée) qui dérive de BaseView.

En HomeView.xaml:

<local:BaseView 
x:Class="XPlatformMenus.UWP.Views.HomeView" 
+0

Merci pour votre réponse. Où puis-je voir que la vue est définie pour dériver de BasePage? –

+0

@ Salvatore'Lucky'Luciano L'ancienne classe liée était dérivée de BasePage. Changer la question invalidera parfois les réponses. –

+0

Il dérive de BaseView. Regardez dans HomeView.xaml – dvorn