我是否可以将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
下一行。
答案 0 :(得分:4)
这里的问题是C#7.0元组不是System.Tuple
,它们是System.ValueTuple
。所以正确的演员是:
Value = (ValueTuple<ThisThing, bool>)parameter;
或者使用元组语法:
Value = ((ThisThing, bool))parameter;