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