我有一个带有DataTemplateSelector的Xamarin Forms ListView,因此我可以显示不同的单元格类型(请参见下面的图像链接)。使用DataTemplateSelector的原因基本上是由于多个子注释以及其他子注释的Entry字段,这些字段应显示在主注释下。
我的问题:我想在主注释,其子注释和输入字段周围放置一个框架,以指示这些元素属于同一元素。最好的方法是什么? (请参见下面链接图像的右侧。)
谢谢您的帮助!
编辑:一些代码。这是我的列表视图:
<ListView HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"
x:Name="commentListView" HasUnevenRows="True" SeparatorVisibility="None"
ItemsSource="{Binding AllComments}"
ItemTemplate="{StaticResource MessageTemplateSelector}" >
</ListView>
这是我的DataTemplateSelector:
public class CommentDataTemplateSelector : Xamarin.Forms.DataTemplateSelector
{
public CommentDataTemplateSelector()
{
this.parentDataTemplate = new DataTemplate(typeof(ParentCommentViewCell));
this.childDataTemplate = new DataTemplate(typeof(ChildCommentViewCell));
this.entryDataTemplate = new DataTemplate(typeof(EntryCommentViewCell));
this.dateDataTemplate = new DataTemplate(typeof(DateCommentViewCell));
this.separatorDataTemplate = new DataTemplate(typeof(SeparatorCommentViewCell));
}
private readonly DataTemplate dateDataTemplate;
private readonly DataTemplate parentDataTemplate;
private readonly DataTemplate childDataTemplate;
private readonly DataTemplate entryDataTemplate;
private readonly DataTemplate separatorDataTemplate;
protected override DataTemplate OnSelectTemplate(object item, BindableObject container)
{
var messageVM = item as CommentBaseViewModel;
if (messageVM == null)
{
return null;
}
switch (messageVM.CommentType)
{
case CommentBaseTypeEnum.Child:
return this.childDataTemplate;
case CommentBaseTypeEnum.Parent:
return this.parentDataTemplate;
case CommentBaseTypeEnum.Entry:
return this.entryDataTemplate;
case CommentBaseTypeEnum.Date:
return this.dateDataTemplate;
case CommentBaseTypeEnum.Separator:
return this.separatorDataTemplate;
default:
Debug.WriteLine("### Is there a Comment ViewCell missing?");
return null;
}
}
}
可以看到,有5个不同的视单元。现在,当填充上面的ListView的ItemSource时,我彼此堆叠不同的类型,例如 1.日期 2.父母 3.多个孩子 4.条目 5.分隔符
然后我重新开始。
我想要的是拥有一个跨越元素1到4的单个框架,我不知道是否以及如何做到这一点,因为我有许多不同的ViewCell。