2013-08-19 3 views
2

Есть ли какой-нибудь пример того, как использовать MvvmCross с компонентом FlyoutNavigation от Xamarin.MvvmCross: Как использовать компонент FlyoutNavigation с MvvmCross

Я получаю сообщение об ошибке, когда пытался установить ViewControllers, используя вид меню из MainNavigationViewModel. Это ошибка, которую я получил «System.Reflection.TargetInvocationException: исключение было выбрано целью вызова».

Вот мой пример кода:

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; 
    } 
} 

ответ

4

Попробуйте этот пример https://github.com/fcaico/MvxSlidingPanels.Touch, который основан на вилке этого компонента

+0

Эй - можно ли использовать это с Dialog? Я вижу, что код использует MvxTouchViewPresenter - я не знаком с этим - буду смотреть на него сегодня - задавался вопросом, можете ли вы дать мне головной убор, сигнализируя, насколько это возможно? – iwayneo

Смежные вопросы