模板 10 中 OnNavigatedToAsync 的 Tuple<ThisThing, bool> 参数

Tuple<ThisThing, bool> parameter for OnNavigatedToAsync in Template 10

我可以将 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));

编辑1: 我已经尝试将其简化为

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

在调试和进入 OnNavigatedToAsync 时,将鼠标悬停在 parameter 上,我可以看到这是我所期望的 Tuple,但结果是 InvalidCastException 在下一行。

这里的问题是 C# 7.0 元组不是 System.Tuple,而是 System.ValueTuple。所以正确的转换是:

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

或使用元组语法:

Value = ((ThisThing, bool))parameter;