我有一个小组的CollectionView。每个组都有一个带有日期的字符串。
随后,我创建了一个CarouselView,其中包含了CollectionView组的所有日期。
我正在尝试创建一种方法来滚动CarouselView的元素,从而将CollectionView滚动到相应的组,但是它不起作用。
CollectionView仍然是静止的。
<CollectionView x:Name="CollectionDiary"....../>c#
public class HumorGroup : ObservableCollection<HumorDiary>
{
public string Name { get; private set; }
public HumorGroup(string name, ObservableCollection<HumorDiary> icon) : base(icon)
{
Name = name;
}
}
public ObservableCollection<HumorGroup> TotHumor { get; private set; } = new ObservableCollection<HumorGroup>();
HumorGroup group = new HumorGroup("Month" + " " + Year, new ObservableCollection<HumorDiary>());
TotHumor.Add(group);
group.Add(item HumorDiary);
private void ScrollCollectionView_Clicked(object sender, EventArgs e)
{
var current = CarouselView.CurrentItem as HumorGroup;
CollectionDiary.ScrollTo(current, position: ScrollToPosition.Start);
}发布于 2021-04-19 03:11:45
--我正在尝试创建一种方法来滚动CarouselView的元素,从而将CollectionView滚动到相应的组,但是它不起作用。
我同意Jason的观点,您可以让CollectionView滚动到CarouselView_Scrolled事件中当前组的第一项。
private void CarouselView_Scrolled(object sender, ItemsViewScrolledEventArgs e)
{
var current = CarouselView1.CurrentItem as HumorGroup;
if(current!=null)
{
CollectionDiary.ScrollTo(current.FirstOrDefault(),ScrollToPosition.Center);
}
}我做了一个样本,你可以看看:
<StackLayout>
<CarouselView
x:Name="CarouselView1"
ItemsSource="{Binding humors}"
Scrolled="CarouselView_Scrolled">
<CarouselView.ItemTemplate>
<DataTemplate>
<StackLayout>
<Label Text="{Binding Name}" />
</StackLayout>
</DataTemplate>
</CarouselView.ItemTemplate>
</CarouselView>
<CollectionView
x:Name="CollectionDiary"
HeightRequest="100"
IsGrouped="True"
ItemsSource="{Binding humors}"
SelectionMode="Single">
<CollectionView.ItemTemplate>
<DataTemplate>
<StackLayout Orientation="Horizontal">
<Label Text="{Binding name}" />
<Label Text="{Binding count}" />
</StackLayout>
</DataTemplate>
</CollectionView.ItemTemplate>
<CollectionView.GroupHeaderTemplate>
<DataTemplate>
<Label
BackgroundColor="LightGray"
FontAttributes="Bold"
FontSize="Large"
Text="{Binding Name}" />
</DataTemplate>
</CollectionView.GroupHeaderTemplate>
</CollectionView>
</StackLayout>
public partial class Page8 : ContentPage
{
public GroupHumorViewmodel groups { get; set; }
public Page8()
{
InitializeComponent();
groups = new GroupHumorViewmodel();
this.BindingContext =groups;
}
private void CarouselView_Scrolled(object sender, ItemsViewScrolledEventArgs e)
{
var current = CarouselView1.CurrentItem as HumorGroup;
if(current!=null)
{
CollectionDiary.ScrollTo(current.FirstOrDefault(),ScrollToPosition.Center);
}
}
}
public class HumorDiary
{
public string name { get; set; }
public int count { get; set; }
}
public class HumorGroup:ObservableCollection<HumorDiary>
{
public string Name { get; set; }
public HumorGroup(string name, ObservableCollection<HumorDiary> humor) : base(humor)
{
Name = name;
}
}
public class GroupHumorViewmodel
{
public ObservableCollection<HumorGroup> humors { get; set; }
public GroupHumorViewmodel()
{
humors = new ObservableCollection<HumorGroup>();
humors.Add(new HumorGroup("2021",new ObservableCollection<HumorDiary>() {
new HumorDiary(){name="2021-day1",count=3},
new HumorDiary(){name="2021-day2",count=3},
new HumorDiary(){name="2021-day3",count=4},
new HumorDiary(){name="2021-day4",count=2},
new HumorDiary(){name="2021-day5",count=5},
new HumorDiary(){name="2021-day6",count=4},
new HumorDiary(){name="2021-day7",count=2},
new HumorDiary(){name="2021-day8",count=5}
}));
humors.Add(new HumorGroup("2020", new ObservableCollection<HumorDiary>() {
new HumorDiary(){name="2020-day1",count=3},
new HumorDiary(){name="2020-day2",count=3},
new HumorDiary(){name="2020-day3",count=4},
new HumorDiary(){name="2020-day4",count=2},
new HumorDiary(){name="2020-day5",count=5},
new HumorDiary(){name="2020-day6",count=4},
new HumorDiary(){name="2020-day7",count=2},
new HumorDiary(){name="2020-day8",count=5}
}));
humors.Add(new HumorGroup("2019", new ObservableCollection<HumorDiary>() {
new HumorDiary(){name="2019-day1",count=3},
new HumorDiary(){name="2019-day2",count=3},
new HumorDiary(){name="2019-day3",count=4},
new HumorDiary(){name="2019-day4",count=2},
new HumorDiary(){name="2019-day5",count=5},
new HumorDiary(){name="2019-day6",count=4},
new HumorDiary(){name="2019-day7",count=2},
new HumorDiary(){name="2019-day8",count=5}
}));
}
}https://stackoverflow.com/questions/67152963
复制相似问题