首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >滚动CollectionView到ItemGroup

滚动CollectionView到ItemGroup
EN

Stack Overflow用户
提问于 2021-04-18 20:11:58
回答 1查看 238关注 0票数 0

我有一个小组的CollectionView。每个组都有一个带有日期的字符串。

随后,我创建了一个CarouselView,其中包含了CollectionView组的所有日期。

我正在尝试创建一种方法来滚动CarouselView的元素,从而将CollectionView滚动到相应的组,但是它不起作用。

CollectionView仍然是静止的。

代码语言:javascript
复制
<CollectionView x:Name="CollectionDiary"....../>

c#

代码语言:javascript
复制
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);
 }
EN

回答 1

Stack Overflow用户

发布于 2021-04-19 03:11:45

--我正在尝试创建一种方法来滚动CarouselView的元素,从而将CollectionView滚动到相应的组,但是它不起作用。

我同意Jason的观点,您可以让CollectionView滚动到CarouselView_Scrolled事件中当前组的第一项。

代码语言:javascript
复制
 private void CarouselView_Scrolled(object sender, ItemsViewScrolledEventArgs e)
    {
        var current = CarouselView1.CurrentItem as HumorGroup;
        if(current!=null)
        {             
            CollectionDiary.ScrollTo(current.FirstOrDefault(),ScrollToPosition.Center);
        }
        
    }

我做了一个样本,你可以看看:

代码语言:javascript
复制
<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}


        }));
      
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67152963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档