首页 > 解决方案 > 集中放置一个 CollectionView 项目

问题描述

CollectionView我有大约 10 个元素,填充了我的类的对象,其中包含 type 的属性DateTime

public class MyCalendar
{
    public DateTime Datet { get; set; }
}

我已将它们插入的类的对象Observablecollection<MyCalendar> OCCalendar

CollectionView我插入了ObservableCollectionasItemsSource

接下来,我在ObservableCollectionwithDateTime属性中查找对象并将其DateTime.Now.DateDateTime在今天日期查找的对象进行比较。它找到了它,我尝试将它插入到中心位置,但CollectionView它没有移动。

ColCalendar.ItemsSource = OCCalendar;

var GiornoCorrente = OCCalendar.Where(x => x.Datet.Date == DateTime.Now.Date).First();
ColCalendar.ScrollTo(GiornoCorrente, position: ScrollToPosition.Center);

有足够的CollectionView元素来左右滚动

标签: c#xamarin.forms

解决方案


接下来,我在 ObservableCollection 中查找具有 DateTime 属性的对象,并将其与 DateTime.Now.Date 进行比较,以查找在今天日期具有 DateTime 的对象。它找到了它,我尝试将它插入到中心位置,但 CollectionView 没有移动。

您在 Collectionview 中只有 10 个项目,我猜 collectionview 不需要滚动到,这些项目将显示在屏幕上。

ScrollToPosition.Center 成员表示该项目应该滚动到视图的中心,就像您使用鼠标的滚轮将特定项目滚动到特定位置一样。

<StackLayout>
        <Button
            x:Name="btn1"
            Clicked="btn1_Clicked"
            Text="scrollto" />
        <CollectionView x:Name="collectionView" ItemsSource="{Binding models}">
            <CollectionView.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition Width="Auto" />
                        </Grid.ColumnDefinitions>
                        <Label HeightRequest="30" Text="{Binding Name}" />
                        <Label Grid.Column="1" Text="{Binding time}" />
                    </Grid>
                </DataTemplate>
            </CollectionView.ItemTemplate>
        </CollectionView>

    </StackLayout>

public partial class Page3 : ContentPage
{        
    public Page3()
    {
        InitializeComponent();                  
        this.BindingContext = new scrollviewmodel();
    }
    private void btn1_Clicked(object sender, EventArgs e)
    {
        scrollviewmodel viewmodel = BindingContext as scrollviewmodel;
        scrollmodel item = viewmodel.models.FirstOrDefault(m => m.time.Date == DateTime.Now.Date);
        collectionView.ScrollTo(item, position: ScrollToPosition.Center);       
    } 
}

public class scrollviewmodel
{
    public ObservableCollection<scrollmodel> models { get; set; }
    public scrollviewmodel()
    {
        models = new ObservableCollection<scrollmodel>()
        {
            new scrollmodel() { Name = "date 1", time = new DateTime(2018, 1, 1) },
            new scrollmodel() { Name = "date 2", time = new DateTime(2019, 1, 1) },
            new scrollmodel() { Name = "date 3", time = new DateTime(2021, 1, 1) },
            new scrollmodel() { Name = "date 4", time = new DateTime(2018, 1, 1) },
            new scrollmodel() { Name = "date 5", time = new DateTime(2018, 1, 1) },
            new scrollmodel() { Name = "date 6", time = new DateTime(2019, 1, 1) },
            new scrollmodel() { Name = "date 7", time = new DateTime(2021, 1, 1) },
            new scrollmodel() { Name = "date 8", time = new DateTime(2018, 1, 1) },
            new scrollmodel() { Name = "date 8", time = new DateTime(2018, 1, 1) },
            new scrollmodel() { Name = "date 10", time = new DateTime(2019, 1, 1) },
            new scrollmodel() { Name = "date 12", time = new DateTime(2021, 3, 1) },
            new scrollmodel() { Name = "date 13", time = new DateTime(2018, 1, 1) }, 
            new scrollmodel() { Name = "date s", time = new DateTime(2019, 1, 1) },
            new scrollmodel() { Name = "date 7c", time = new DateTime(2021, 1, 1) },
            new scrollmodel() { Name = "date 8v", time = new DateTime(2018, 1, 1) },
            new scrollmodel() { Name = "date 8b", time = new DateTime(2018, 1, 1) },
            new scrollmodel() { Name = "date 1n0", time = new DateTime(2019, 1, 1) },
            new scrollmodel() { Name = "date 12n", time = new DateTime(2021, 3, 2) },
            new scrollmodel() { Name = "date 13h", time = new DateTime(2018, 1, 1) },
            new scrollmodel() { Name = "date 4", time = new DateTime(2018, 1, 1) },
            new scrollmodel() { Name = "date a", time = new DateTime(2018, 1, 1) },
            new scrollmodel() { Name = "date 5", time = new DateTime(2018, 1, 1) },
            new scrollmodel() { Name = "date 6", time = new DateTime(2019, 1, 1) },
            new scrollmodel() { Name = "date 7", time = new DateTime(2021, 1, 1) },
            new scrollmodel() { Name = "date 8", time = new DateTime(2018, 1, 1) },
            new scrollmodel() { Name = "date 8", time = new DateTime(2018, 1, 1) },
            new scrollmodel() { Name = "date 10", time = new DateTime(2019, 1, 1) },
            new scrollmodel() { Name = "date 12", time = new DateTime(2021, 3, 1) },
            new scrollmodel() { Name = "date 13", time = new DateTime(2018, 1, 1) }
        };
    }
}
public class scrollmodel
{
     public string Name { get; set; }
     public DateTime time { get; set; }
}

推荐阅读