2017-06-27 7 views
0

をパラメータとしてOnNavigatedToAsyncに渡すことができますか?この種の情報を渡すより良い方法はありますか?テンプレート10のOnNavigatedToAsyncのTuple <ThisThing、bool>パラメータ

私はこれを試しましたが、下のValue =行に無効なキャスト例外が続きます。 Tupleとしてパラメータを渡す

public override async Task OnNavigatedToAsync(object parameter, NavigationMode mode, IDictionary<string, object> suspensionState) 
{ 
     Value = (Tuple<ThisThing, bool>)((suspensionState.ContainsKey(nameof(Value))) ? suspensionState[nameof(Value)] : parameter); 
} 

:値がTuple<ThisThing, bool>

ViewModel.csとして入力されます。

public void GoToDetailsPage() => 
     NavigationService.Navigate(typeof(ThisThingPage), (new ThisThing() { Prop1=1, Prop2=2}, true)); 

EDIT1:私はすでに

public override async Task OnNavigatedToAsync(object parameter, NavigationMode mode, IDictionary<string, object> suspensionState) 
{ 
    Value = (Tuple<ThisThing, bool>)parameter; 
} 

とするときにこれを簡素化しようとしました デバッグとOnNavigatedToAsyncに足を踏み入れると、私はそれは私が、期待するものであることがわかりますparameterの上にマウスを移動Tupleですが、次の行にはInvalidCastExceptionが入ります。

+1

は1行ですべてを入れないでください。デバッガで 'var x = suspensionState [nameof(Value)]'を指定すると 'x 'が実際に何であるかを調べることができます。明らかにその 'タプル' –

+0

申し訳ありません。私はすでに何か似たようなことを言いました。元の投稿を編集する –

+0

'ValueTuple'は' Tuple'ではないようです。今それを掘り起こす。 –

答えて

4

ここでの問題は、C#7.0のタプルがSystem.Tupleでないことです。それらはSystem.ValueTupleです。だから、正しいキャストは次のとおりです。

Value = (ValueTuple<ThisThing, bool>)parameter; 

やタプルの構文を使用して:あなたがデバッグしているとき

Value = ((ThisThing, bool))parameter; 
+0

アイテムに名前を付ける場合は、Value =((ThisThing MyThing、bool MyBool))パラメータ。 –

関連する問題