检查最后一个列表项是否等于长度 Xamarin Forms 绑定

Check if last list item is equal to length Xamarin Forms binding

我正在尝试隐藏最后一个网格列。我正在尝试使用 DataTrigger 来完成它,这就是我的触发器的样子:

            <ResourceDictionary>
               <Style x:Key="HideLastVerticalLine" TargetType="BoxView">
                  <Style.Triggers>
                    <DataTrigger
                        Binding="{Binding Items, Path=Items.LastOrDefault}"
                        TargetType="BoxView"
                        Value="{Binding Items.Length}">
                        <Setter Property="IsVisible" Value="False" />
                    </DataTrigger>
                  </Style.Triggers>
               </Style>
           </ResourceDictionary>

           <BoxView Style="{StaticResource HideLastVerticalLine}" Grid.Column="1" HeightRequest="100" WidthRequest="1" BackgroundColor="Black"/>

我正在将此 DataTrigger 应用于包含垂直线分隔符的 BoxView(我想要 Trim() 之类的东西,只是为了删除最后一个分隔线。

我该怎么做?

您可以使用 DataTemplateSelector 来实现。

样本为here

创建两个数据模板,一个用于 LastViewCell,一个用于其他 ViewCells:

public class PersonDataTemplateSelector : DataTemplateSelector
{
    public DataTemplate NormalTemplate { get; set; }

    public DataTemplate LastCellTemplate { get; set; }

    protected override DataTemplate OnSelectTemplate (object item, BindableObject container)
    {

        var lastItem = Items.LastOrDefault();

        return lastItem = item ? LastCellTemplate : NormalTemplate;
    }
}

通过检查项目是否为最后一项来选择使用哪个 DataTemplate

  • 创建可绑定布局。
  • 创建单独的模板选择器class。
  • 用于填充可绑定布局 itemsource 的 class 必须具有新的 属性 isLast bool。
  • 更新列表,最后一个元素为真。
  • 现在将这个新列表与您在视图上使用的可绑定布局绑定。
  • 不要忘记在该页面的资源字典中添加模板选择器。 将列表中的最后一项更新为 isLast = true 使用。

    int index = 0;
    foreach (var item in list) // here updating last element of list islast =true
    {
    item.IsLast = (index == list.Count - 1);
    index++;
    }