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



我正在尝试隐藏最后一个网格列。我正在尝试使用 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 来实现此目的。

示例在此处。

创建两个数据模板,一个用于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

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

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

最新更新