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 onを使用し、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 に答える