模板10中的OnNavigatedToAsync的元组<thisthing,bool =“”>参数

时间:2017-06-27 22:48:37

标签: c# uwp tuples template10 c#-7.0

我是否可以将Tuple作为参数传递给OnNavigatedToAsync?是否有更好的方法来传递这类信息?

我已尝试过此操作,但我在下面的Value =行中一直收到无效的强制转换异常。值的类型为Tuple<ThisThing, bool>

ViewModel.cs:

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传递。

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 个答案:

答案 0 :(得分:4)

这里的问题是C#7.0元组不是System.Tuple,它们是System.ValueTuple。所以正确的演员是:

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

或者使用元组语法:

Value = ((ThisThing, bool))parameter;