C# Listview滚动结束事件

C# Listview滚动结束事件,c#,xamarin.forms,C#,Xamarin.forms,我想Listview滚动结束事件,当我有一个内容,然后我会点击该内容加载更多,然后当内容将显示,然后底部应该滚动 private void ScrollViewEvent_Scrolled(object sender, ScrolledEventArgs e) { if (e.ScrollY + ScrollViewEvent.Height >= ScrollViewEvent.ContentSize.Height)

我想Listview滚动结束事件,当我有一个内容,然后我会点击该内容加载更多,然后当内容将显示,然后底部应该滚动

private void ScrollViewEvent_Scrolled(object sender, ScrolledEventArgs e)
        {
            if (e.ScrollY + ScrollViewEvent.Height >= ScrollViewEvent.ContentSize.Height)
                AtEnd = true;
            else
                AtEnd = false;
        }

        public bool AtEnd
        {
            get
            {
                return m_atEnd;
            }

            set
            {
                if(m_atEnd != value)
                {
                    m_atEnd = value;
                    OnPropertyChanged("AtEnd");

                }
            }
        }

 <ScrollView x:Name="ScrollViewEvent"
                        Scrolled="ScrollViewEvent_Scrolled"
                        VerticalScrollBarVisibility="Never">
</ScrollView>
                    <Label Grid.Column="0" Text="Id" />
                    <Label Grid.Column="1" Text="First Name" />
                    <Label Grid.Column="2" Text="Surname" />
                    <Label Grid.Column="3" Text="Date Of Birth" />
                </Grid>
            </ListView.Header>

            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="*" />
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto" />
                            </Grid.RowDefinitions>
                            <Label Grid.Column="0" Text="{Binding Id}" />
                            <Label Grid.Column="1" Text="{Binding FirstName}" />
                            <Label Grid.Column="2" Text="{Binding Surname}" />
                            <Label Grid.Column="3" Text="{Binding Age}" />
                        </Grid>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

        <Button
            x:Name="btn"
            Clicked="Btn_Clicked"
            Text=" Load more items" />
    </StackLayout>


public partial class Page6 : ContentPage
{

    public PersonViewModel p { get; set; }
    public Page6 ()
    {
        InitializeComponent ();
        p = new PersonViewModel();
        this.BindingContext = p;

    }      

    private void Btn_Clicked(object sender, EventArgs e)
    {
        personmodel model = p.peoples.Last();
        Device.BeginInvokeOnMainThread(() =>
      listView.ScrollTo(model, ScrollToPosition.End, true));
    }
}


public class PersonViewModel
{
    public ObservableCollection<personmodel> peoples { get; set; }


    public PersonViewModel()
    {
        peoples = new ObservableCollection<personmodel>();
      for(int i=0;i<50;i++)
        {
            peoples.Add(new personmodel() { Id="the "+ i +" item",FirstName="cherry",Surname="Bu",Age=28});
        }


    }
}
private void ScrollViewEvent\u已滚动(对象发送方,ScrolledEventArgs e)
{
如果(例如ScrollY+ScrollViewEvent.Height>=ScrollViewEvent.ContentSize.Height)
AtEnd=真;
其他的
AtEnd=假;
}
公共场所
{
得到
{
返回m_atEnd;
}
设置
{
如果(m_atEnd!=值)
{
m_atEnd=值;
不动产变更(“AtEnd”);
}
}
}

内容加载时,底部部分应自动滚动。我不必滚动它。

为此,您必须编写自定义渲染器。我在我的一个应用程序中实现了同样的功能。
                    <Label Grid.Column="0" Text="Id" />
                    <Label Grid.Column="1" Text="First Name" />
                    <Label Grid.Column="2" Text="Surname" />
                    <Label Grid.Column="3" Text="Date Of Birth" />
                </Grid>
            </ListView.Header>

            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="*" />
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto" />
                            </Grid.RowDefinitions>
                            <Label Grid.Column="0" Text="{Binding Id}" />
                            <Label Grid.Column="1" Text="{Binding FirstName}" />
                            <Label Grid.Column="2" Text="{Binding Surname}" />
                            <Label Grid.Column="3" Text="{Binding Age}" />
                        </Grid>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

        <Button
            x:Name="btn"
            Clicked="Btn_Clicked"
            Text=" Load more items" />
    </StackLayout>


public partial class Page6 : ContentPage
{

    public PersonViewModel p { get; set; }
    public Page6 ()
    {
        InitializeComponent ();
        p = new PersonViewModel();
        this.BindingContext = p;

    }      

    private void Btn_Clicked(object sender, EventArgs e)
    {
        personmodel model = p.peoples.Last();
        Device.BeginInvokeOnMainThread(() =>
      listView.ScrollTo(model, ScrollToPosition.End, true));
    }
}


public class PersonViewModel
{
    public ObservableCollection<personmodel> peoples { get; set; }


    public PersonViewModel()
    {
        peoples = new ObservableCollection<personmodel>();
      for(int i=0;i<50;i++)
        {
            peoples.Add(new personmodel() { Id="the "+ i +" item",FirstName="cherry",Surname="Bu",Age=28});
        }


    }
}
对于iOS,您需要实现
UITableViewDelegate
decelerationed
事件。 我不确定是否使用Android。

您可以使用Lis滚动到ListView的最后一项

                    <Label Grid.Column="0" Text="Id" />
                    <Label Grid.Column="1" Text="First Name" />
                    <Label Grid.Column="2" Text="Surname" />
                    <Label Grid.Column="3" Text="Date Of Birth" />
                </Grid>
            </ListView.Header>

            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="*" />
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto" />
                            </Grid.RowDefinitions>
                            <Label Grid.Column="0" Text="{Binding Id}" />
                            <Label Grid.Column="1" Text="{Binding FirstName}" />
                            <Label Grid.Column="2" Text="{Binding Surname}" />
                            <Label Grid.Column="3" Text="{Binding Age}" />
                        </Grid>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

        <Button
            x:Name="btn"
            Clicked="Btn_Clicked"
            Text=" Load more items" />
    </StackLayout>


public partial class Page6 : ContentPage
{

    public PersonViewModel p { get; set; }
    public Page6 ()
    {
        InitializeComponent ();
        p = new PersonViewModel();
        this.BindingContext = p;

    }      

    private void Btn_Clicked(object sender, EventArgs e)
    {
        personmodel model = p.peoples.Last();
        Device.BeginInvokeOnMainThread(() =>
      listView.ScrollTo(model, ScrollToPosition.End, true));
    }
}


public class PersonViewModel
{
    public ObservableCollection<personmodel> peoples { get; set; }


    public PersonViewModel()
    {
        peoples = new ObservableCollection<personmodel>();
      for(int i=0;i<50;i++)
        {
            peoples.Add(new personmodel() { Id="the "+ i +" item",FirstName="cherry",Surname="Bu",Age=28});
        }


    }
}

                    <Label Grid.Column="0" Text="Id" />
                    <Label Grid.Column="1" Text="First Name" />
                    <Label Grid.Column="2" Text="Surname" />
                    <Label Grid.Column="3" Text="Date Of Birth" />
                </Grid>
            </ListView.Header>

            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="*" />
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto" />
                            </Grid.RowDefinitions>
                            <Label Grid.Column="0" Text="{Binding Id}" />
                            <Label Grid.Column="1" Text="{Binding FirstName}" />
                            <Label Grid.Column="2" Text="{Binding Surname}" />
                            <Label Grid.Column="3" Text="{Binding Age}" />
                        </Grid>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

        <Button
            x:Name="btn"
            Clicked="Btn_Clicked"
            Text=" Load more items" />
    </StackLayout>


public partial class Page6 : ContentPage
{

    public PersonViewModel p { get; set; }
    public Page6 ()
    {
        InitializeComponent ();
        p = new PersonViewModel();
        this.BindingContext = p;

    }      

    private void Btn_Clicked(object sender, EventArgs e)
    {
        personmodel model = p.peoples.Last();
        Device.BeginInvokeOnMainThread(() =>
      listView.ScrollTo(model, ScrollToPosition.End, true));
    }
}


public class PersonViewModel
{
    public ObservableCollection<personmodel> peoples { get; set; }


    public PersonViewModel()
    {
        peoples = new ObservableCollection<personmodel>();
      for(int i=0;i<50;i++)
        {
            peoples.Add(new personmodel() { Id="the "+ i +" item",FirstName="cherry",Surname="Bu",Age=28});
        }


    }
}

公共部分类第6页:内容页
{
公共PersonViewModel p{get;set;}
公共页6()
{
初始化组件();
p=新PersonViewModel();
this.BindingContext=p;
}      
私有无效Btn_已单击(对象发送方,事件参数e)
{
personmodel model=p.peoples.Last();
Device.beginInvokeMainThread(()=>
ScrollTo(model,ScrollToPosition.End,true));
}
}
公共类PersonViewModel
{
公共可观测集合{get;set;}
公共PersonViewModel()
{
peoples=新的可观察集合();
对于(int i=0;i