ios - MvvmCross:如何将 FlyoutNavigation 组件与 MvvmCross 一起使用

标签 ios xamarin mvvmcross

是否有关于如何将 MvvmCross 与 Xamarin 的 FlyoutNavigation 组件一起使用的示例。

当我尝试使用 MainNavigationViewModel 中的菜单 View 设置 ViewController 时出现错误。这是我得到的错误“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;
    }
}

最佳答案

试试这个例子 https://github.com/fcaico/MvxSlidingPanels.Touch它基于该组件的一个分支

关于ios - MvvmCross:如何将 FlyoutNavigation 组件与 MvvmCross 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18324740/

相关文章:

json - Xamarin + JSON.Net

c# - Xamarin 如何通过单击新资源布局来打开另一个布局

windows - 强制 Xamarin 在 Windows 上使用 Mono

xamarin.android - ItemClick 用于 MvxLinearLayout? MVVMCross 5

ios - 窗口没有填满整个屏幕

iphone - 封装iAd实现?

ios - Swift,电话号码正则表达式

binding - 交换机上的 mvvmcross 绑定(bind)在发布时失败

ios - 在 UIwebView 应用程序中使用 Facebook 登录

ios - 创建一个可扩展的 UITableView