Xamarin.Forms Interaksi CarouselView
CarouselView
menentukan properti berikut yang mengontrol interaksi pengguna:
CurrentItem
, dari jenisobject
, item saat ini sedang ditampilkan. Properti ini memiliki modeTwoWay
pengikatan default , dan memilikinull
nilai ketika tidak ada data yang ditampilkan.CurrentItemChangedCommand
, dari jenisICommand
, yang dijalankan ketika item saat ini berubah.CurrentItemChangedCommandParameter
, dari jenisobject
, yang merupakan parameter yang diteruskan keCurrentItemChangedCommand
.IsBounceEnabled
, dari jenisbool
, yang menentukan apakahCarouselView
akan memantul pada batas konten. Nilai defaultnya adalahtrue
.IsSwipeEnabled
, dari jenisbool
, yang menentukan apakah gerakan gesek akan mengubah item yang ditampilkan. Nilai defaultnya adalahtrue
.Loop
, dari jenisbool
, yang menentukan apakahCarouselView
menyediakan akses yang diulang ke kumpulan itemnya. Nilai defaultnya adalahtrue
.Position
, dari jenisint
, indeks item saat ini dalam koleksi yang mendasar. Properti ini memiliki modeTwoWay
pengikatan default , dan memiliki nilai 0 ketika tidak ada data untuk ditampilkan.PositionChangedCommand
, dari jenisICommand
, yang dijalankan ketika posisi berubah.PositionChangedCommandParameter
, dari jenisobject
, yang merupakan parameter yang diteruskan kePositionChangedCommand
.VisibleViews
, dari jenisObservableCollection<View>
, yang merupakan properti baca-saja yang berisi objek untuk item yang saat ini terlihat.
Semua properti ini didukung oleh BindableProperty
objek, yang berarti bahwa properti dapat menjadi target pengikatan data.
CarouselView
CurrentItemChanged
menentukan peristiwa yang diaktifkan saat CurrentItem
properti berubah, baik karena pengguna menggulir, atau ketika aplikasi mengatur properti. Objek CurrentItemChangedEventArgs
yang menyertai CurrentItemChanged
peristiwa memiliki dua properti, kedua jenis object
:
PreviousItem
– item sebelumnya, setelah properti berubah.CurrentItem
– item saat ini, setelah properti berubah.
CarouselView
juga mendefinisikan PositionChanged
peristiwa yang diaktifkan saat Position
properti berubah, baik karena pengguna menggulir, atau ketika aplikasi mengatur properti. Objek PositionChangedEventArgs
yang menyertai PositionChanged
peristiwa memiliki dua properti, kedua jenis int
:
PreviousPosition
– posisi sebelumnya, setelah properti berubah.CurrentPosition
– posisi saat ini, setelah properti berubah.
Merespons perubahan item saat ini
Ketika item yang ditampilkan saat ini berubah, CurrentItem
properti akan diatur ke nilai item. Ketika properti ini berubah, CurrentItemChangedCommand
dijalankan dengan nilai yang CurrentItemChangedCommandParameter
diteruskan ke ICommand
. Properti Position
kemudian diperbarui, dan peristiwa diaktifkan CurrentItemChanged
.
Penting
Properti Position
berubah ketika CurrentItem
properti berubah. Ini akan mengakibatkan PositionChangedCommand
dijalankan, dan peristiwa menembak PositionChanged
.
Kejadian
Contoh XAML berikut menunjukkan CarouselView
yang menggunakan penanganan aktivitas untuk merespons perubahan item saat ini:
<CarouselView ItemsSource="{Binding Monkeys}"
CurrentItemChanged="OnCurrentItemChanged">
...
</CarouselView>
Kode C# yang setara adalah:
CarouselView carouselView = new CarouselView();
carouselView.SetBinding(ItemsView.ItemsSourceProperty, "Monkeys");
carouselView.CurrentItemChanged += OnCurrentItemChanged;
Dalam contoh ini, penanganan OnCurrentItemChanged
aktivitas dijalankan saat CurrentItemChanged
peristiwa diaktifkan:
void OnCurrentItemChanged(object sender, CurrentItemChangedEventArgs e)
{
Monkey previousItem = e.PreviousItem as Monkey;
Monkey currentItem = e.CurrentItem as Monkey;
}
Dalam contoh ini, penanganan OnCurrentItemChanged
aktivitas mengekspos item sebelumnya dan saat ini:
Perintah
Contoh XAML berikut menunjukkan CarouselView
yang menggunakan perintah untuk merespons perubahan item saat ini:
<CarouselView ItemsSource="{Binding Monkeys}"
CurrentItemChangedCommand="{Binding ItemChangedCommand}"
CurrentItemChangedCommandParameter="{Binding Source={RelativeSource Self}, Path=CurrentItem}">
...
</CarouselView>
Kode C# yang setara adalah:
CarouselView carouselView = new CarouselView();
carouselView.SetBinding(ItemsView.ItemsSourceProperty, "Monkeys");
carouselView.SetBinding(CarouselView.CurrentItemChangedCommandProperty, "ItemChangedCommand");
carouselView.SetBinding(CarouselView.CurrentItemChangedCommandParameterProperty, new Binding("CurrentItem", source: RelativeBindingSource.Self));
Dalam contoh ini, CurrentItemChangedCommand
properti mengikat ke ItemChangedCommand
properti , meneruskan CurrentItem
nilai properti sebagai argumen. kemudian ItemChangedCommand
dapat menanggapi perubahan item saat ini, sesuai kebutuhan:
public ICommand ItemChangedCommand => new Command<Monkey>((item) =>
{
PreviousMonkey = CurrentMonkey;
CurrentMonkey = item;
});
Dalam contoh ini, ItemChangedCommand
objek pembaruan yang menyimpan item sebelumnya dan saat ini.
Merespons perubahan posisi
Ketika item yang saat ini ditampilkan berubah, Position
properti akan diatur ke indeks item saat ini dalam koleksi yang mendasar. Ketika properti ini berubah, PositionChangedCommand
dijalankan dengan nilai yang PositionChangedCommandParameter
diteruskan ke ICommand
. Peristiwa itu PositionChanged
kemudian terjadi. Position
Jika properti telah diubah secara terprogram, CarouselView
akan digulir ke item yang sesuai dengan Position
nilai.
Catatan
Position
Mengatur properti ke 0 akan menghasilkan item pertama dalam koleksi yang mendasar ditampilkan.
Kejadian
Contoh XAML berikut menunjukkan CarouselView
yang menggunakan penanganan aktivitas untuk merespons Position
perubahan properti:
<CarouselView ItemsSource="{Binding Monkeys}"
PositionChanged="OnPositionChanged">
...
</CarouselView>
Kode C# yang setara adalah:
CarouselView carouselView = new CarouselView();
carouselView.SetBinding(ItemsView.ItemsSourceProperty, "Monkeys");
carouselView.PositionChanged += OnPositionChanged;
Dalam contoh ini, penanganan OnPositionChanged
aktivitas dijalankan saat PositionChanged
peristiwa diaktifkan:
void OnPositionChanged(object sender, PositionChangedEventArgs e)
{
int previousItemPosition = e.PreviousPosition;
int currentItemPosition = e.CurrentPosition;
}
Dalam contoh ini, penanganan OnCurrentItemChanged
aktivitas mengekspos posisi sebelumnya dan saat ini:
Perintah
Contoh XAML berikut menunjukkan CarouselView
yang menggunakan perintah untuk merespons Position
perubahan properti:
<CarouselView ItemsSource="{Binding Monkeys}"
PositionChangedCommand="{Binding PositionChangedCommand}"
PositionChangedCommandParameter="{Binding Source={RelativeSource Self}, Path=Position}">
...
</CarouselView>
Kode C# yang setara adalah:
CarouselView carouselView = new CarouselView();
carouselView.SetBinding(ItemsView.ItemsSourceProperty, "Monkeys");
carouselView.SetBinding(CarouselView.PositionChangedCommandProperty, "PositionChangedCommand");
carouselView.SetBinding(CarouselView.PositionChangedCommandParameterProperty, new Binding("Position", source: RelativeBindingSource.Self));
Dalam contoh ini, PositionChangedCommand
properti mengikat ke PositionChangedCommand
properti , meneruskan Position
nilai properti sebagai argumen. Kemudian PositionChangedCommand
dapat menanggapi perubahan posisi, sesuai kebutuhan:
public ICommand PositionChangedCommand => new Command<int>((position) =>
{
PreviousPosition = CurrentPosition;
CurrentPosition = position;
});
Dalam contoh ini, PositionChangedCommand
objek pembaruan yang menyimpan posisi sebelumnya dan saat ini.
Prasetel item saat ini
Item saat ini dalam CarouselView
dapat diatur secara terprogram dengan mengatur CurrentItem
properti ke item. Contoh XAML berikut menunjukkan CarouselView
yang telah memilih item saat ini:
<CarouselView ItemsSource="{Binding Monkeys}"
CurrentItem="{Binding CurrentItem}">
...
</CarouselView>
Kode C# yang setara adalah:
CarouselView carouselView = new CarouselView();
carouselView.SetBinding(ItemsView.ItemsSourceProperty, "Monkeys");
carouselView.SetBinding(CarouselView.CurrentItemProperty, "CurrentItem");
Catatan
Properti CurrentItem
memiliki mode pengikatan default .TwoWay
Data CarouselView.CurrentItem
properti mengikat ke CurrentItem
properti model tampilan terhubung, yang berjenis Monkey
. Secara default, TwoWay
pengikatan digunakan sehingga jika pengguna mengubah item saat ini, nilai CurrentItem
properti akan diatur ke objek saat ini Monkey
. Properti CurrentItem
didefinisikan dalam MonkeysViewModel
kelas:
public class MonkeysViewModel : INotifyPropertyChanged
{
// ...
public ObservableCollection<Monkey> Monkeys { get; private set; }
public Monkey CurrentItem { get; set; }
public MonkeysViewModel()
{
// ...
CurrentItem = Monkeys.Skip(3).FirstOrDefault();
OnPropertyChanged("CurrentItem");
}
}
Dalam contoh ini, CurrentItem
properti diatur ke item keempat dalam Monkeys
koleksi:
Prasetel posisi
Item yang CarouselView
ditampilkan dalam dapat diatur secara terprogram dengan mengatur Position
properti ke indeks item dalam koleksi yang mendasar. Contoh XAML berikut menunjukkan CarouselView
yang mengatur item yang ditampilkan:
<CarouselView ItemsSource="{Binding Monkeys}"
Position="{Binding Position}">
...
</CarouselView>
Kode C# yang setara adalah:
CarouselView carouselView = new CarouselView();
carouselView.SetBinding(ItemsView.ItemsSourceProperty, "Monkeys");
carouselView.SetBinding(CarouselView.PositionProperty, "Position");
Catatan
Properti Position
memiliki mode pengikatan default .TwoWay
Data CarouselView.Position
properti mengikat ke Position
properti model tampilan terhubung, yang berjenis int
. Secara default, TwoWay
pengikatan digunakan sehingga jika pengguna menggulir melalui CarouselView
, nilai Position
properti akan diatur ke indeks item yang ditampilkan. Properti Position
didefinisikan dalam MonkeysViewModel
kelas:
public class MonkeysViewModel : INotifyPropertyChanged
{
// ...
public int Position { get; set; }
public MonkeysViewModel()
{
// ...
Position = 3;
OnPropertyChanged("Position");
}
}
Dalam contoh ini, Position
properti diatur ke item keempat dalam Monkeys
koleksi:
Menentukan status visual
CarouselView
menentukan empat status visual:
CurrentItem
mewakili status visual untuk item yang saat ini ditampilkan.PreviousItem
mewakili status visual untuk item yang ditampilkan sebelumnya.NextItem
mewakili status visual untuk item berikutnya.DefaultItem
mewakili status visual untuk sisa item.
Status visual ini dapat digunakan untuk memulai perubahan visual pada item yang ditampilkan oleh CarouselView
.
Contoh XAML berikut menunjukkan cara menentukan CurrentItem
status visual , , PreviousItem
NextItem
, dan DefaultItem
:
<CarouselView ItemsSource="{Binding Monkeys}"
PeekAreaInsets="100">
<CarouselView.ItemTemplate>
<DataTemplate>
<StackLayout>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="CurrentItem">
<VisualState.Setters>
<Setter Property="Scale"
Value="1.1" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="PreviousItem">
<VisualState.Setters>
<Setter Property="Opacity"
Value="0.5" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="NextItem">
<VisualState.Setters>
<Setter Property="Opacity"
Value="0.5" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="DefaultItem">
<VisualState.Setters>
<Setter Property="Opacity"
Value="0.25" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<!-- Item template content -->
<Frame HasShadow="true">
...
</Frame>
</StackLayout>
</DataTemplate>
</CarouselView.ItemTemplate>
</CarouselView>
Dalam contoh ini, CurrentItem
status visual menentukan bahwa item saat ini yang ditampilkan oleh CarouselView
akan mengubah propertinya Scale
dari nilai default 1 menjadi 1,1. Status PreviousItem
visual dan NextItem
menentukan bahwa item di sekitar item saat ini akan ditampilkan dengan Opacity
nilai 0,5. Status DefaultItem
visual menentukan bahwa sisa item yang ditampilkan oleh CarouselView
akan ditampilkan dengan Opacity
nilai 0,25.
Catatan
Atau, status visual dapat didefinisikan dalam Style
yang memiliki TargetType
nilai properti yang merupakan jenis elemen akar dari DataTemplate
, yang ditetapkan sebagai ItemTemplate
nilai properti.
Cuplikan layar berikut menunjukkan CurrentItem
status visual , PreviousItem
, dan NextItem
:
Untuk informasi selengkapnya tentang status visual, lihat Xamarin.Forms Visual State Manager.
Bersihkan item saat ini
Properti CurrentItem
dapat dibersihkan dengan mengaturnya, atau objek yang diikatnya, ke null
.
Nonaktifkan pantulan
Secara default, CarouselView
memantulkan item pada batas konten. Ini dapat dinonaktifkan dengan mengatur properti ke IsBounceEnabled
false
.
Nonaktifkan perulangan
Secara default, CarouselView
menyediakan akses perulangan ke kumpulan itemnya. Oleh karena itu, menggesek mundur dari item pertama dalam koleksi akan menampilkan item terakhir dalam koleksi. Demikian pula, menggeser maju dari item terakhir dalam koleksi akan kembali ke item pertama dalam koleksi. Perilaku ini dapat dinonaktifkan dengan mengatur properti ke Loop
false
.
Menonaktifkan interaksi gesek
Secara default, CarouselView
memungkinkan pengguna untuk menelusuri item menggunakan gerakan gesek. Interaksi gesek ini dapat dinonaktifkan dengan mengatur IsSwipeEnabled
properti ke false
.