2016-10-28 1 views
0

Ich versuche, die Möglichkeit zu implementieren, verschiedene Seiten in meinem Xamarin MVVM-Projekt zu wechseln. Ich habe drei Ordner - "Models", "Views" und "ViewModels". "Views" enthält "MainView", dessen Rolle es ist, andere Views anzuzeigen.Durch verschiedene Seiten in MVVM wechseln

MainView.xaml:

<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      x:Class="KeepFit.Views.MainView"> 

    <ContentPresenter x:Name="ContentArea" Content="{Binding CurrentView}"/> 

</ContentPage> 

MainView.xaml.cs:

public partial class MainView : ContentPage 
{ 
    public MainView() 
    { 
     InitializeComponent(); 

     BindingContext = new MainViewModel(); 
    } 
} 

Wie Sie sehen können, "Mainview" ist binded Klasse "MainViewModel".

MainViewModel.cs:

public class MainViewModel : INotifyPropertyChanged 
    { 
     public Command SwitchViewsCommand { get; private set; } 

     public MainViewModel() 
     { 
      SwitchViewsCommand = new Command((parameter) => 
      CurrentView = (ContentPage)Activator.CreateInstance(parameter as Type)); 
      CurrentView = new HomeView(); 
     } 

     private ContentPage _currentView; 
     public ContentPage CurrentView 
     { 
      get 
      { 
       return _currentView; 
      } 
      set 
      { 
       if (value != _currentView) 
       { 
        _currentView = value; 
        OnPropertyChanged("CurrentView"); 
       } 
      } 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 

     protected virtual void OnPropertyChanged([CallerMemberName] 
     string propertyName = null) 
     { 
      PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

Die Current meinem Homeview gesetzt ist (sagen wir es standardmäßig Content ist) im Konstruktor. Es ist an den ContentPresenter gebunden, daher sollte es am Anfang der Laufzeit meiner Anwendung sichtbar sein. Aber es ist nicht.

Ich habe festgestellt, dass der ContentPresenter das Xamarin.Forms.View-Objekt als "Inhalt" erwartet - und meine Ansichten erben von Xamarin.Forms.ContentPage. Aber wenn ich sie zum Beispiel zu ContentViews ändere, kann ich den BindingContext nicht für sie festlegen. Kann mir jemand erklären, was ich falsch mache?

Antwort

0

Sie versuchen das?

async void butonClick(object sender, EventArgs e) 
    { 
     await Navigation.PushAsync(new EntryPageCode()); 
    } 

Ihre View-Instanz in der Position von "EntryPageCode", ok. Versuchen Sie das und sagen Sie mir, ob es Ihnen gut geht.

Verwandte Themen