我正在开发一个使用Xamarin Classis UI和MvvmCross 5.6.x的移动应用程序,我们希望利用url基本导航来添加与应用程序的深层链接 . 我们希望遵循与客户网站相同的网址方案,因此可以共享网址以导航到两者中的特定内容 . 例如,以下两个网址应按照描述进行导航:
http://www.rseg.net/rewards应导航至忠诚度奖励列表http://www.rseg.net/rewards/1234应显示有关特定奖励的详细信息
我将以下两个视图模型设置为url的目标:
[assembly: MvxNavigation(typeof(RewardsViewModel),
@"http://www.rseg.net/rewards")]
namespace MvvmNav.Core.ViewModels
{
public class RewardsViewModel : MvxViewModel
{
…
}
}
和
[assembly: MvxNavigation(typeof(RewardDetailViewModel),
@"http://www.rseg.net/rewards/(?<id>[0-9]{4})$")]
namespace MvvmNav.Core.ViewModels
{
public class RewardDetailViewModel :
MvxViewModel<RewardDetailViewModel.Parameteres>
{
…
}
}
我添加了以下两个命令作为初始视图模型 .
public IMvxAsyncCommand ShowRewardsByUrl { get; protected set; }
protected async Task ShowRewardsByUrlHandler()
{
var url = "http://www.rseg.net/rewards";
if (await _navigationService.CanNavigate(url))
await _navigationService.Navigate(url);
}
public IMvxAsyncCommand ShowRewardDetailByUrl { get; protected set; }
protected async Task ShowRewardDetailByUrlHandler()
{
var url = "http://www.rseg.net/rewards/1234";
if (await _navigationService.CanNavigate(url))
await _navigationService.Navigate(url);
}
我看到的行为是两个命令最终导航到RewardsViewModel而不是导航到RewwardDetailViewModel的第二个命令;有没有办法指定导航网址,以便我可以实现上述行为?
整个示例可以从GitHub https://github.com/rsegtx/So.MvvmNav下载;我只完成了Android应用的观看次数 .
提前致谢 .
1 回答
我认为你需要Navigation facade才能工作,并将ViewModels的两条路线也改为
@"http://www.rseg.net/rewards(/(?<id>[0-9]{4}))?$"
:HIH