Xamarin将命令传递给命令参数传递给命令参数

我刚开始使用Xamarin表单现在我有一个项目列表,我在自定义模板中显示。

我想要的行为是事件在页面的上下文中触发(使用Corcav.Behaviors ),但我想将单击的项目传递给命令。 我似乎无法让最后一部分工作。 使用下面的实现,事件正确触发,但传递的参数是MyEventsListModel,但我想要点击的项目。

注意我最好是想在xaml / viewmodel中使用一个解决方案,而不是在代码隐藏中。 并且两个事件在事件上发生的替代解决方案也很好。

XAML:

             

视图模型:

  [ImplementPropertyChanged] public class MyEventsListModel : FreshBasePageModel { private readonly EventsDatastore eventsStore; public MyEventsListModel(EventsDatastore eventsStore) { this.eventsStore = eventsStore; } protected async override void ViewIsAppearing(object sender, EventArgs e) { this.Events = await eventsStore.GetMyEventsAsync(); } public ObservableCollection Events { get; set; } = new ObservableCollection(); public Command NavigateToEventDetails { get { return new Command(async (clickedEvent) => { await CoreMethods.PushPageModel(clickedEvent); }); } } } 

解决方案非常简单。 在深入了解Corcav的源代码后,很容易弄明白。 EventToCommand.cs中的以下代码

 private void OnFired(EventArgs e) { object param = this.PassEventArgument ? e : this.CommandParameter; if (!string.IsNullOrEmpty(this.CommandName)) { if (this.Command == null) this.CreateRelativeBinding(); } if (this.Command == null) throw new InvalidOperationException("No command available, Is Command properly set up?"); if (e == null && this.CommandParameter == null) throw new InvalidOperationException("You need a CommandParameter"); if (this.Command != null && this.Command.CanExecute(param)) { this.Command.Execute(param); } } 

处理它。 简单地将“PassEventArgument”设置为true可以解决我的问题。