2013-08-19 1 views
2

Existe-t-il un exemple d'utilisation de MvvmCross avec le composant FlyoutNavigation de Xamarin?MvvmCross: Comment utiliser le composant FlyoutNavigation avec MvvmCross

Je reçois une erreur lorsque j'ai essayé de définir les ViewControllers à l'aide des vues de menu de MainNavigationViewModel. C'est l'erreur que j'ai "System.Reflection.TargetInvocationException: Exception a été levée par la cible d'une invocation."

Voici mon exemple de code:

public class MainNavigationViewModel : MvxViewModel 
{ 
    public MainNavigationViewModel() 
    { 
     MenuOne = new MenuOneViewModel(); 
    } 

    private MenuOne _MenuOne; 

    public MenuOneViewModel MenuOne 
    { 
     get { return _MenuOne; } 
     set 
     { 
      _MenuOne = value; 
      RaisePropertyChanged(() => MenuOne); 
     } 
    } 
} 


[Register("MainNavigationView")] 
public sealed class MainNavigationView : MvxViewController 
{ 
    protected MainNavigationViewModel MainNavViewModel 
    { get { return base.ViewModel as MainNavigationViewModel; } } 

    public MainNavigationView() 
    { 
     ViewDidLoad(); 
    } 

    public override void ViewWillAppear(bool animated) 
    { 
     base.ViewWillAppear(animated); 
     NavigationController.NavigationBarHidden = true; 
    } 

    public override void ViewDidLoad() 
    { 
     base.ViewDidLoad(); 

     if (ViewModel == null) 
      return; 

     var flyoutNavigationController = new FlyoutNavigationController(); 

     var menuViewRoot = new RootElement(null); 

     var menuItems = new List<StringElement>() 
      { 
       new StringElement("Menu One") 
      }; 

     var menuSection = new Section("Main Menu") { menuItems }; 
     menuViewRoot.Add(menuSection); 

     flyoutNavigationController.NavigationRoot = menuViewRoot; 

     var viewControllers = new UIViewController[1]; 
     viewControllers[0] = CreateMenuItemController(MainNavViewModel.MainOne); 
     flyoutNavigationController.ViewControllers = viewControllers; 

     flyoutNavigationController.View.Frame = UIScreen.MainScreen.Bounds; 
     flyoutNavigationController.ToggleMenu(); 
     Add(flyoutNavigationController.View); 
    } 

    private UIViewController CreateMenuItemController(IMvxViewModel viewModel) 
    { 
     var controller = new UINavigationController(); 
     var screen = this.CreateViewControllerFor(viewModel) as UIViewController; 
     controller.PushViewController(screen, false); 
     return controller; 
    } 
} 

Répondre

4

Essayez cet exemple https://github.com/fcaico/MvxSlidingPanels.Touch qui repose sur une fourchette de ce composant

+0

Hey - est-il possible de l'utiliser avec Dialog? Je vois que le code utilise un MvxTouchViewPresenter - je ne suis pas familier avec cela - le regardera aujourd'hui - se demandait si vous pouviez me donner un avantage en signalant si c'était au moins possible? – iwayneo