C# Listview滚动结束事件
我想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)
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