检查最后一个列表项是否等于长度 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++;
}
我正在尝试隐藏最后一个网格列。我正在尝试使用 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++;
}