带有Navigate的MVVM Prism EventToCommandBehavior引发ArgumentNullException(TargetName)

问题描述 投票:0回答:1

在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一个简单的项目,再现了问题。

开始并单击一个项目。

xaml mvvm navigation prism
1个回答
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看起来很简单,但不是正确的选择,尤其是当您已经有一个更复杂的项目模板时。

© www.soinside.com 2019 - 2024. All rights reserved.