Xamarin Listview:跨多个项目的框架?

时间:2018-10-02 20:24:17

标签: listview xamarin

我有一个带有DataTemplateSelector的Xamarin Forms ListView,因此我可以显示不同的单元格类型(请参见下面的图像链接)。使用DataTemplateSelector的原因基本上是由于多个子注释以及其他子注释的Entry字段,这些字段应显示在主注释下。

我的问题:我想在主注释,其子注释和输入字段周围放置一个框架,以指示这些元素属于同一元素。最好的方法是什么? (请参见下面链接图像的右侧。)

谢谢您的帮助!

Design example

编辑:一些代码。这是我的列表视图:

<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。

0 个答案:

没有答案