MVVM Prism EventToCommandBehavior with NavigateTo raise Argu



在 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 似乎很容易和简单,但不是正确的选择,尤其是当您已经拥有更复杂的项模板时。

相关内容

  • 没有找到相关文章

最新更新