在Xamarin Forms项目中,当用户选择一个项目时,我试图从一个包含项目列表的页面导航到另一个页面。我希望在xaml中声明的导航和作为参数传递的事件args的ItemSelected。当我点击项目时,会引发ArgumentNullException:
值不能为空。参数名称:TargetElement
这是代码
<ListView.Behaviors>
<b:EventToCommandBehavior
EventName="ItemSelected"
Command="{prism:NavigateTo 'ContractVersionV'}"
EventArgsParameterPath="SelectedItem"
/>
</ListView.Behaviors>
如果我不使用NavigateTo扩展名并使用viewModel中的命令管理导航,则一切正常。
我可能要做什么?
堆栈跟踪为:
在Prism.Xaml.ParentPageAwareExtension`1.Initialize()中在Prism.Navigation.Xaml.NavigationExtensionBase.d__16.MoveNext()中在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()中在System.Runtime.CompilerServices.AsyncMethodBuilderCore中。<> c.b__7_0(对象状态)在System.Threading.WinRTSynchronizationContextBase.Invoker.InvokeCore()
中Here一个简单的项目,再现了问题。
开始并单击一个项目。
这是因为IProvideValueTarget.TargetObject为null,这可能是因为行为(例如,说)在视觉树之外。但是我认为这是一个错误。也许Brian Lagunas对此案有解决方案。
我想出了一个在ListView上附加的命令,该命令在ItemTapped上执行。
所以改为:
<ListView.Behaviors>
<b:EventToCommandBehavior
EventName="ItemTapped"
Command="{prism:NavigateTo 'MyPage'}"
EventArgsParameterPath="Item" />
</ListView.Behaviors>
您可以:
<ListView ListViewExtensions.ItemTappedCommand="{prism:NavigateTo 'MyPage'}" />
我以这种方式使它起作用,但是我对此并不满意。而且使用带按钮的Button来插入ItemTemplate看起来很简单,但不是正确的选择,尤其是当您已经有一个更复杂的项目模板时。