在 Xamarin 窗体项目中,当用户选择项目时,我尝试从包含项目列表的页面导航到另一个页面。 我希望在 xaml 中声明的导航和事件参数的ItemSelected作为参数传递。 当我点击该项目时,会引发ArgumentNullException:
值不能为空。 参数名称:目标元素
这是代码
<ListView.Behaviors>
<b:EventToCommandBehavior
EventName="ItemSelected"
Command="{prism:NavigateTo 'ContractVersionV'}"
EventArgsParameterPath="SelectedItem"
/>
</ListView.Behaviors>
如果我不使用NavigateTo扩展并使用 viewModel 中的命令管理导航,则一切正常。
我可能想做什么吗?
更新
堆栈跟踪为:
in Prism.Xaml.ParentPageAwareExtension'1.Initialize(( in Prism.Navigation.Xaml.NavigationExtensionBase.d__16.MoveNext(( in System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw(( in System.Runtime.CompilerServices.AsyncMethodBuilderCore.<>c.b__7_0(Object state( in System.Threading.WinRTSynchronizationContextBase.Invoker.InvokeCore((
这是一个重现问题的简单项目。
开始并单击一个项目。
这是因为IProvideValueTarget.TargetObject为空,这可能是因为行为 - 比方说 - 在可视化树之外。 但是我认为这是一个错误。也许布莱恩·拉古纳斯(Brian Lagunas(对此案有解决方案。
我想出了一个在ListView上附加的命令,该命令在ItemTapped上执行。
所以相反:
<ListView.Behaviors>
<b:EventToCommandBehavior
EventName="ItemTapped"
Command="{prism:NavigateTo 'MyPage'}"
EventArgsParameterPath="Item" />
</ListView.Behaviors>
您可以:
<ListView ListViewExtensions.ItemTappedCommand="{prism:NavigateTo 'MyPage'}" />
我让它以这种方式工作,但我对此不太满意。 使用带有命令的按钮引入 ItemTemplate 似乎很容易和简单,但不是正确的选择,尤其是当您已经拥有更复杂的项模板时。