【问题标题】:Check if last list item is equal to length Xamarin Forms binding检查最后一个列表项是否等于长度 Xamarin Forms 绑定
【发布时间】:2019-12-28 13:42:25
【问题描述】:

我正在尝试隐藏最后一个 Grid 列。我正在尝试使用 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() 之类的东西,只是为了删除最后一个分隔线。

我该怎么做?

【问题讨论】:

  • 你能贴一张你想要完成的图片和完整的代码吗?你想隐藏一整列还是只隐藏一个boxview?
  • Items.LastOrDefault 是一个方法,所以绑定不起作用。
  • 所以我有一个 DataTemplate 为列表中的每个项目创建 2 列。第一列将是一个列表视图,第二列将是分隔符垂直线。我想隐藏最后一项的第二列(为了不在最后一项上显示垂直分隔线)

标签: xaml xamarin.forms datatrigger


【解决方案1】:
  • 创建可绑定布局。
  • 创建单独的模板选择器类。
  • 用于填充可绑定布局 itemsource 的类必须具有新属性 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++;
    }

【讨论】:

    【解决方案2】:

    您可以使用DataTemplateSelector 来实现此目的。

    样本是here

    创建两个DataTemplate,一个用于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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-04
      • 1970-01-01
      • 2022-06-17
      • 2021-10-03
      • 2017-02-10
      • 1970-01-01
      • 2023-03-28
      相关资源
      最近更新 更多