0

通常我会使用通用导航:

navigationService
    .UriFor<PivotPageViewModel>()  
    .Navigate();  

但是,如果我有一个现有的视图模型实例,我该怎么办?

4

1 回答 1

1

检查来源揭示了这一点UriBuilder

public Uri BuildUri() 
{
    var viewType = ViewLocator.LocateTypeForModelType(typeof(TViewModel), null, null);

    if(viewType == null) 
    {
        throw new InvalidOperationException(string.Format("No view was found for {0}. See the log for searched views.", typeof(TViewModel).FullName));
    }

    var packUri = ViewLocator.DeterminePackUriFromType(typeof(TViewModel), viewType);
    var qs = BuildQueryString();

    return new Uri(packUri + qs, UriKind.Relative);
}

因此,您可以使用 GetType并使用VM 的类型navigationService使用反射:MakeGenericMethod

http://msdn.microsoft.com/en-us/library/system.reflection.methodinfo.makegenericmethod.aspx

或者您可以使用上面的代码,typeof用 a 替换调用viewModel.GetType()(但您必须在 UriBuilder 上重写 BuildQueryString,因为它是私有的 - 使用选项 1!)

这是你的选择!

于 2013-08-22T22:20:04.600 回答