c# - 我可以将特定样式应用于 Xamarin 中 ObservableCollection 的第一项吗?
问题描述
我想知道是否有办法将特定样式应用于ObservableCollection
Xamarin 中的第一个元素。我想对其进行自定义,以便它以比其他方式呈现的特定方式。到目前为止,我已经做了很多研究,但我找不到任何可以帮助我的东西。真的有可能做这样的事情吗?我的问题没有提供代码,因为我仍然要开始我想到的项目。
解决方案
正如 Jason 的回复,您可以使用DataTemplateSelector来执行此操作,您需要一个属性来区分第一项与其他项。
我做了一个样本,你可以看看:
创建一个 DataTemplateSelector:
public class itemDataTemplateSelector : DataTemplateSelector
{
public DataTemplate firsttemplate { get; set; }
public DataTemplate secondtemplate { get; set; }
protected override DataTemplate OnSelectTemplate(object item, BindableObject container)
{
if(((itemdata)item).isfirst==true)
{
return firsttemplate;
}
return secondtemplate;
}
}
在 XAML 中使用 DataTemplateSelector
<ContentPage.Resources>
<DataTemplate x:Key="firstitemTemplate">
<StackLayout Orientation="Horizontal">
<Label
FontSize="Large"
Text="{Binding name}"
TextColor="Green" />
<Label
FontSize="Large"
Text="{Binding age}"
TextColor="Green" />
</StackLayout>
</DataTemplate>
<DataTemplate x:Key="seconditemTemplate">
<StackLayout Orientation="Horizontal">
<Label Text="{Binding name}" TextColor="Red" />
<Label Text="{Binding age}" TextColor="Red" />
</StackLayout>
</DataTemplate>
<selector:itemDataTemplateSelector
x:Key="itemdatatemplateselector"
firsttemplate="{StaticResource firstitemTemplate}"
secondtemplate="{StaticResource seconditemTemplate}" />
</ContentPage.Resources>
申请Collectionview
<ContentPage.Content>
<StackLayout>
<CollectionView ItemTemplate="{StaticResource itemdatatemplateselector}" ItemsSource="{Binding items}" />
</StackLayout>
</ContentPage.Content>
我使用 isfirst Boolen 属性将第一项与其他项区分开来。
public partial class Page14 : ContentPage
{
public ObservableCollection<itemdata> items { get; set; }
public Page14()
{
InitializeComponent();
items = new ObservableCollection<itemdata>()
{
new itemdata(){name="cherry",age=28,isfirst=true },
new itemdata(){name="cherry 1",age=28,isfirst=false },
new itemdata(){name="cherry 2",age=28,isfirst=false },
new itemdata(){name="cherry 3",age=28,isfirst=false },
new itemdata(){name="cherry 4",age=28,isfirst=false }
};
this.BindingContext = this;
}
}
public class itemdata
{
public string name { get; set; }
public int age { get; set; }
public Boolean isfirst { get; set; }
}
推荐阅读
- api - Fetch API 显示 JSON 结果的问题
- c - 如何在 32 位编译器中使用 64 位整数?
- javascript - jQueryUI 自动完成返回 AJAX 错误 0 当用户点击回车
- python - 将装饰器添加到抽象方法
- module - 使用子程序将程序转换为模块时出错
- javascript - React:将 2 个 props 从子组件传递回同一函数中的父组件
- mysql - 分组总和摘要
- javascript - 将文件引用添加到数据库中
- javascript - 在 Fabric JS 中更改活动对象的边框颜色和样式
- python - 如何让python忽略垃圾收集的对象?