在Xamarin Forms项目中,当用户选择一个项目时,我试图从一个包含项目列表的页面导航到另一个页面。 我希望在xaml中声明的导航和作为参数传递的事件args的 ItemSelected 。 当我点击该项目时,会引发 ArgumentNullException :
值不能为null。 参数名称: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一个简单的项目,再现了问题。
开始并单击一个项目。
答案 0 :(得分:0)
那是因为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看起来很简单,但不是正确的选择,尤其是当您已经有一个更复杂的项目模板时。