xamarin – 如何在mvvmlight中实现自定义导航服务

xamarin – 如何在mvvmlight中实现自定义导航服务,第1张

概述我对现有的MVVMlight导航界面方法不太满意,而且非常小,我想实现我自己的导航界面,我可以在其中展示 *** 纵导航堆栈并将其与MVVM灯集成的复杂方法. 任何有关实现这一目标的指导都非常感谢 更新: 我想实现页面之间移动的其他过渡,如页面卷曲,翻转,旋转等 这是一个完整的实现示例,可以通过添加一个完全替换MvvmLight中的新接口来解决问题,并且还允许您选择是否使用动画.在此示例中,我们添加了控制 我对现有的MVVMlight导航界面方法不太满意,而且非常小,我想实现我自己的导航界面,我可以在其中展示 *** 纵导航堆栈并将其与MVVM灯集成的复杂方法.

任何有关实现这一目标的指导都非常感谢

更新:

我想实现页面之间移动的其他过渡,如页面卷曲,翻转,旋转等

解决方法 这是一个完整的实现示例,可以通过添加一个完全替换Mvvmlight中的新接口来解决问题,并且还允许您选择是否使用动画.在此示例中,我们添加了控制导航是否应设置动画的功能:

接口

public interface ICustomNavigationService{    string CurrentPageKey { get; }    voID GoBack(bool animate = true);    voID Navigateto(string pageKey,bool animate = true);    voID Navigateto(string pageKey,object parameter,bool animate = true);}

履行

public class NavigationService : ICustomNavigationService{    private Readonly Dictionary<string,Type> _pagesByKey = new Dictionary<string,Type>();    private NavigationPage _navigation;    public NavigationPage Navigation    {        get        {            return _navigation;        }    }    public string CurrentPageKey    {        get        {            lock (_pagesByKey)            {                if (_navigation.CurrentPage == null)                {                    return null;                }                var pageType = _navigation.CurrentPage.GetType();                return _pagesByKey.ContainsValue(pageType)                    ? _pagesByKey.First(p => p.Value == pageType).Key                    : null;            }        }    }    public voID GoBack(bool animate = true)    {        _navigation.PopAsync(animate);        MessagingCenter.Send<INavigationService>(this,"NAVIGATING");    }    public voID Navigateto(string pageKey,bool animate = true)    {        Navigateto(pageKey,null,animate);        MessagingCenter.Send<INavigationService>(this,bool animate = true)    {        lock (_pagesByKey)        {            if (_pagesByKey.ContainsKey(pageKey))            {                var type = _pagesByKey[pageKey];                ConstructorInfo constructor;                object[] parameters;                if (parameter == null)                {                    constructor = type.GetTypeInfo()                        .DeclaredConstructors                        .FirstOrDefault(c => !c.GetParameters().Any());                    parameters = new object[]                    {                    };                }                else                {                    constructor = type.GetTypeInfo()                        .DeclaredConstructors                        .FirstOrDefault(                            c =>                            {                                var p = c.GetParameters();                                return p.Count() == 1                                       && p[0].ParameterType == parameter.GetType();                            });                    parameters = new[]                    {                        parameter                    };                }                if (constructor == null)                {                    throw new InvalIDOperationException(                        "No suitable constructor found for page " + pageKey);                }                var page = constructor.Invoke(parameters) as Page;                _navigation.PushAsync(page,animate);            }            else            {                throw new ArgumentException(                    string.Format(                        "No such page: {0}. DID you forget to call NavigationService.Configure?",pageKey),"pageKey");            }        }    }    public voID Configure(string pageKey,Type pageType)    {        lock (_pagesByKey)        {            if (_pagesByKey.ContainsKey(pageKey))            {                _pagesByKey[pageKey] = pageType;            }            else            {                _pagesByKey.Add(pageKey,pageType);            }        }    }    public voID Initialize(NavigationPage navigation)    {        _navigation = navigation;    }}

从这里,您可以添加其他您想要的方法.确保注入此内容或直接在您使用Mvvmlight之前使用它.

总结

以上是内存溢出为你收集整理的xamarin – 如何在mvvmlight中实现自定义导航服务全部内容,希望文章能够帮你解决xamarin – 如何在mvvmlight中实现自定义导航服务所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1135467.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存