CollectionView页脚xamarinf表单粘贴到页面底部

时间:2019-11-07 18:52:39

标签: xamarin.forms

我正在最新的xamarin表格4.3中使用收藏夹视图,我想知道是否有一种方法可以使收藏夹视图的页脚停留在页面底部,即使仅在收藏夹视图中只有很少的项时

这可能吗?

谢谢

1 个答案:

答案 0 :(得分:0)

CollectionView可以显示页眉和页脚,这些页眉和页脚可与列表中的项目一起滚动。页脚指定将在列表末尾显示的字符串,绑定或视图。它不能停留在页面底部。 enter image description here

解决方案:

一种简单的方法是创建带有标签的自定义控件,以模拟collectionview的页眉和页脚。

MyCustomControl:

<StackLayout Orientation="Vertical">
    <Label x:Name="Header_label" Text="Hader" VerticalOptions="StartAndExpand" BackgroundColor="Red"></Label>
    <CollectionView ItemsSource="{Binding models}" ItemsLayout="VerticalList">
        <CollectionView.ItemTemplate>
            <DataTemplate>

                <StackLayout>
                    <Label x:Name="ID_label" Text="{Binding id}"></Label>
                    <Label x:Name="Name_label" Text="{Binding name}"></Label>
                    <Image x:Name="image" Source="{Binding image}"></Image>
                </StackLayout>

            </DataTemplate>
        </CollectionView.ItemTemplate>
    </CollectionView>
    <Label x:Name="Footer_label" Text="Footer" VerticalOptions="EndAndExpand" BackgroundColor="Green"></Label>
</StackLayout>

型号:

public class model
{
    public string name { get; set; }
    public string image { get; set; }
    public int id { get; set; }
}

将内容绑定到自定义控件中,也可以在MainPage中进行绑定。

请注意: 在MainActivity.cs中初始化Xamarin.Forms之前,请添加以下标志。

 Forms.SetFlags("CollectionView_Experimental");

enter image description here

我已经在GitHub上上传了,您可以从Collectionview / MyCustomControl文件夹下载以供参考。 https://github.com/WendyZang/Test.git

已更新:

或者您可以根据collectionview项目的数量控制页脚。

创建自定义控件时,请使用IsVisible属性。

   <Label x:Name="Footer_label" IsVisible="{Binding IsVisible}" Text="Footer" VerticalOptions="EndAndExpand" BackgroundColor="Green"></Label>

使自定义控件继承INotifyPropertyChanged

public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
    private bool _IsVisible;
    public bool IsVisible
    {
        get
        {
            return _IsVisible;
        }

        set
        {
            if (_IsVisible != value)
            {
                _IsVisible = value;
                NotifyPropertyChanged("IsVisible");
            }
        }
    }

根据计数设置IsVisible

 if (models.Count <8)
        {
            IsVisible = false;

        }
        else
        {
            IsVisible = true;
        }

该示例已经在更新的文件夹中上传到了Github。 enter image description here