任何有关实现这一目标的指导都非常感谢
更新:
我想实现页面之间移动的其他过渡,如页面卷曲,翻转,旋转等
解决方法 这是一个完整的实现示例,可以通过添加一个完全替换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中实现自定义导航服务所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)