3
私はXamarinフォームから始めました。私はカスタムテンプレートに表示するアイテムのリストを持っています。Xamarinはクリックしたアイテムをコマンドパラメータとしてコマンドに渡します
私がしたい振る舞いは、ページのコンテキストで(Corcav.Behaviorsを使用して)発生しましたが、クリックした項目をコマンドに渡したいと思います。私は最後の部分を働かせるように見えません。以下の実装では、イベントは正しく発生しますが、渡されたパラメータはMyEventsListModelですが、クリックしたアイテムが必要です。
メモコードアンサーではなく、xaml/viewmodelのソリューションが必要です。そして、両方のイベントがイベントで発生する代わりの解決法も問題ありません。
XAML:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:behaviors="clr-namespace:Corcav.Behaviors;assembly=Corcav.Behaviors"
x:Class="TheEventsApp.Mobile.MyEventsList"
Title="My Events"
x:Name="MainPage">
<ListView ItemsSource="{Binding Events}">
<behaviors:Interaction.Behaviors>
<behaviors:BehaviorCollection>
<behaviors:EventToCommand EventName="ItemTapped" Command="{Binding NavigateToEventDetails}" CommandParameter="{Binding .}" />
</behaviors:BehaviorCollection>
</behaviors:Interaction.Behaviors>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Orientation="Vertical">
<Label Text="{Binding Name}" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentPage>
のViewModel:
[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<Event> Events { get; set; } = new ObservableCollection<Event>();
public Command NavigateToEventDetails
{
get
{
return new Command(async (clickedEvent) =>
{
await CoreMethods.PushPageModel<EventDetailsPageModel>(clickedEvent);
});
}
}
}
わかりやすく、ありがとうございます。 –