Xamrin.Forms 用户界面——控件——ListView——ListView 交互

来源:互联网 发布:网络摄像头ip地址破解 编辑:程序博客网 时间:2024/06/16 03:58

ListView交互性

通过实施选择,滑动删除和拉式刷新,将交互功能添加到您的ListView。

PDF用于离线使用
  • 下载PDF
相关样品:
  • ListView交互性

让我们知道你对此的感受

ListView支持通过以下方式与其呈现的数据进行交互:

  • 选择和水龙头 - 响应水龙头和选择/取消选择项目。启用或禁用行选择(默认情况下启用)。
  • 上下文操作 - 显示每个项目的功能,例如,滑动到删除。
  • 拉扯刷新 - 实现用户从本地体验中获得的拉扯到刷新习惯。

选择和水龙头

ListView一次支持选择一个项目。默认情况下选择为开启。当用户点击一个项目时,会触发两个事件:ItemTappedItemSelected。请注意,点击相同的项目两次将不会触发多个ItemSelected事件,但会触发多个ItemTapped事件。还要注意,ItemSelected如果取消选择项目,将被调用。

请注意,ItemSelected当项目被取消选择并被选中时,它们被称为两者。这意味着您需要SelectedItemItemSelected事件处理程序中检查null ,然后才能使用它:

void OnSelection (object sender, SelectedItemChangedEventArgs e){  if (e.SelectedItem == null) {    return; //ItemSelected is called on deselection, which results in SelectedItem being set to null  }  DisplayAlert ("Item Selected", e.SelectedItem.ToString (), "Ok");  //((ListView)sender).SelectedItem = null; //uncomment line if you want to disable the visual selection state.}

禁用选择

如果要禁用选择,请处理ItemSelected事件并将SelectedItem属性设置为null:

SelectionDemoList.ItemSelected += (sender, e) => {    ((ListView)sender).SelectedItem = null;};

启用选择:

请注意,在Windows Phone上,某些单元格,包括SwitchCell不更新其视觉状态以响应选择。

上下文操作

通常,用户将希望对某个项目采取行动ListView。例如,考虑邮件应用程序中的电子邮件列表。在iOS上,您可以滑动以删除邮件,在Windows Phone上,可以长按消息,然后将其删除:

上下文动作可以在C#和XAML中实现。下面你会找到两个具体的指南,但是首先让我们来看看这两个的一些关键的实现细节。

上下文操作使用MenuItems 创建。MenuItems的点击事件由MenuItem本身引发,而不是ListView。这不同于为单元格处理tap事件,其中ListView引发事件而不是单元格。因为ListView正在提升事件,它的事件处理程序将被给予关键信息,例如选择或点击哪个项目。

默认情况下,MenuItem无法知道它属于哪个单元格。CommandParameterMenuItem用于存储对象,例如MenuItem的ViewCell后面的对象。CommandParameter可以在XAML和C#中设置。

C#

可以Cell通过创建MenuItems并将其添加到ContextActions单元的集合中,在任何子类中实现上下文操作(只要它不被用作组头)。您可以为上下文操作配置以下属性:

  • 文本 - 菜单项中显示的字符串。
  • 点击 - 点击项目时的事件。
  • IsDestructive - (可选)当为true时,该项目在iOS上的呈现方式不同。

可以将多个上下文操作添加到单元格中,但只能IsDestructive设置一个true。以下代码演示了如何将上下文操作添加到ViewCell

var moreAction = new MenuItem { Text = "More" };moreAction.SetBinding (MenuItem.CommandParameterProperty, new Binding ("."));moreAction.Clicked += async (sender, e) => {    var mi = ((MenuItem)sender);    Debug.WriteLine("More Context Action clicked: " + mi.CommandParameter);};var deleteAction = new MenuItem { Text = "Delete", IsDestructive = true }; // red backgrounddeleteAction.SetBinding (MenuItem.CommandParameterProperty, new Binding ("."));deleteAction.Clicked += async (sender, e) => {    var mi = ((MenuItem)sender);    Debug.WriteLine("Delete Context Action clicked: " + mi.CommandParameter);};// add to the ViewCell's ContextActions propertyContextActions.Add (moreAction);ContextActions.Add (deleteAction);

XAML

MenuItem也可以声明地在XAML集合中创建。下面的XAML演示了实现了两个上下文操作的自定义单元格:

<ListView x:Name="ContextDemoList">  <ListView.ItemTemplate>    <DataTemplate>      <ViewCell>         <ViewCell.ContextActions>            <MenuItem Clicked="OnMore" CommandParameter="{Binding .}"               Text="More" />            <MenuItem Clicked="OnDelete" CommandParameter="{Binding .}"               Text="Delete" IsDestructive="True" />         </ViewCell.ContextActions>         <StackLayout Padding="15,0">             <Label Text="{Binding title}" />         </StackLayout>      </ViewCell>    </DataTemplate>  </ListView.ItemTemplate></ListView>

在代码隐藏文件中,确保实现Clicked方法:

public void OnMore (object sender, EventArgs e) {    var mi = ((MenuItem)sender);    DisplayAlert("More Context Action", mi.CommandParameter + " more context action", "OK");}public void OnDelete (object sender, EventArgs e) {    var mi = ((MenuItem)sender);    DisplayAlert("Delete Context Action", mi.CommandParameter + " delete context action", "OK");}

拉动刷新

用户已经预期下拉列表的数据将刷新该列表。ListView支持这个开箱即用的。要启用拉到刷新功能,设置IsPullToRefreshEnabled为true:

listView.IsPullToRefreshEnabled = true;

用户拉动时拉动刷新:

当用户释放拉时,拉到刷新。这是用户在更新列表时看到的内容: 

请注意,从Xamarin.Forms 1.4.3起,Windows Phone 8.1不支持拉式刷新。在Windows Phone 8上,拉入刷新不是本机平台的功能,所以Xamarin.Forms提供了拉入刷新的实现。最后,请注意,如果列表中的所有元素都可以适合屏幕(换句话说,如果不需要垂直滚动),则拉拔更新将无法在Windows Phone上运行。

ListView公开了一些允许您回应到刷新事件的事件。

  • RefreshCommand将被调用和Refreshing 称为事件。IsRefreshing将被设置为true
  • 您应该在命令或事件中执行刷新列表视图内容所需的任何代码。
  • 当刷新完成后,调用EndRefresh或设置IsRefreshingfalse告诉你做的列表视图。

CanExecute属性受到尊重,这为您提供了一种方法来控制是否启用“拉到刷新”命令。

阅读全文
0 0
原创粉丝点击