仅针对xamarin中的特定列表项在列表视图中隐藏行

时间:2019-03-06 17:12:14

标签: listview xamarin mvvm xamarin.forms

我在xaml中有一个分组的listView。

这是listView对象:

附件:

public string TCPNumber { get; set; }
public string AttachmentName { get; set; }
public int FileType { get; set; }

这些组是基于FileType值的X和Y。 每个列表项都显示以上3个项的值。 我想在文件类型值为2的Y组列表项中隐藏TCPNumber项目。

下面是我的xaml:

<ContentPage.Resources>
    <ResourceDictionary>
        <converter:TCPGridVisibleConverter x:Key="TCPGridVisible" />
    </ResourceDictionary>
<ContentPage.Resources>

<ListView x:Name="lvTCPs" HasUnevenRows="True"
<ListView.GroupHeaderTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout>
                            <Label Text="{Binding Key}"/>
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.GroupHeaderTemplate>
<ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Grid>
                            <Grid.RowDefinitions>
<RowDefinition Height="{Binding Path=FileType, Source={x:Reference 
Name=AttachmentsTabPage}, Converter={StaticResource TCPGridVisible}}"> 
</RowDefinition>
                                <RowDefinition Height="Auto"></RowDefinition>
                                <RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="1*"></ColumnDefinition>
                                <ColumnDefinition Width="2*"></ColumnDefinition>
                            </Grid.ColumnDefinitions>
</ListView>

这是我试图隐藏ViewCell的第一行的方法,但是没有成功。 有帮助吗?

1 个答案:

答案 0 :(得分:2)

我写了一个有关在文件类型值为2的Y组列表项中隐藏TCPNumber项的演示。

首先,我在列表视图项的不同行中设置了TCPNumberAttachmentNameFileType。当文件类型值为2时,第一行的TCPNumber会像下面的屏幕快照一样隐藏。enter image description here

有我的xaml。

   <StackLayout>
    <ListView x:Name="lvTCPs" HasUnevenRows="True" >
                <ListView.GroupHeaderTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <StackLayout>
                                <Label Text="KEY"/>
                            </StackLayout>
                        </ViewCell>
                    </DataTemplate>
                </ListView.GroupHeaderTemplate>

                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <Grid>
                                <Grid.RowDefinitions>

                                <RowDefinition Height="{Binding FileType, Converter={local:TCPGridVisibleConverter} }"></RowDefinition>
                                <RowDefinition Height="Auto"></RowDefinition>
                                <RowDefinition Height="Auto"></RowDefinition>
                                </Grid.RowDefinitions>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="1*"></ColumnDefinition>
                                    <ColumnDefinition Width="2*"></ColumnDefinition>
                                </Grid.ColumnDefinitions>


                        <Label Text="{Binding TCPNumber}" Grid.Row="0" Grid.Column="0" />
                        <Label Text="{Binding AttachmentName}" Grid.Row="1" Grid.Column="0" />
                        <Label Text="{Binding FileType}" Grid.Row="2" Grid.Column="0" />

                    </Grid>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>


</StackLayout>

有我的TCPGridVisibleConverter

    public class TCPGridVisibleConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (Equals(value, null))
            return new GridLength(0);

        var status = value.ToString();

        switch (status)
        {
            case ("2"):
                {
                    return new GridLength(0);
                }
            default:
                {

                    return new GridLength(1, GridUnitType.Auto);
                }
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value;
    }
}

有我的数据。

        List<TCP> list = new List<TCP>();
        list.Add(new TCP("1001","abc",2));
        list.Add(new TCP("1002", "bca", 1));
        list.Add(new TCP("1003", "bca", 2));
        list.Add(new TCP("1004", "abc", 1));
        list.Add(new TCP("1005", "abc", 1));
        lvTCPs.ItemsSource = list;

有您的模特。

    public class TCP
{
    public TCP(string TCPNumber, string AttachmentName, int FileType)
    {
        this.TCPNumber = TCPNumber;
        this.AttachmentName = AttachmentName;
        this.FileType = FileType;

    }
    public string TCPNumber { get; set; }
    public string AttachmentName { get; set; }
    public int FileType { get; set; }
}

希望它可以为您提供帮助。