C# Xamarin可扩展列表视图

C# Xamarin可扩展列表视图,c#,xaml,listview,mobile,xamarin,C#,Xaml,Listview,Mobile,Xamarin,在Xamarin有这样的本地人吗?有一个父元素列表,当其中一个被单击时,子元素列表就会出现在它下面 前 我尝试将自定义:listview放在自定义:listview中。计划是在单击时更改可见性,但我得到以下错误: System.NotSupportedException:无法从本机句柄0xbf835bfc(键句柄0x26566218)激活Xamarin.Forms.Platform.Android.ListViewAdapter类型的实例。您可以在Xamarin表单中使用ListView中的分组

在Xamarin有这样的本地人吗?有一个父元素列表,当其中一个被单击时,子元素列表就会出现在它下面

我尝试将自定义:listview放在自定义:listview中。计划是在单击时更改可见性,但我得到以下错误:


System.NotSupportedException:无法从本机句柄0xbf835bfc(键句柄0x26566218)激活Xamarin.Forms.Platform.Android.ListViewAdapter类型的实例。

您可以在Xamarin表单中使用ListView中的分组头以本机方式执行此操作。首先创建一个分组结构:

public class Grouping<TK, T> : ObservableCollection<T>
{
    public TK Key { get; private set; }

    public Grouping(TK key, IEnumerable<T> items)
    {
        Key = key;
        foreach (var item in items)
            Items.Add(item);
    }
}
在页面的ViewModel中创建以下属性以绑定到ListView

public ObservableCollection<Grouping<SelectParentViewModel, Child>> Parents { get; set; }
publicobservableCollection父对象{get;set;}
初始化父元素以包含每个父元素的新分组以及子元素的新空列表

添加一个以
分组
为参数的命令。该命令首先翻转分组键的选定属性。然后检查选定特性的新值:

  • 如果为true,则->填充子元素
  • 如果为false,则->清除子元素
在您的ListView中

  • 将ItemsSource属性绑定到Categories属性,并将IsGroupInEnabled设置为“True”
  • 将ListView.GroupHeaderTemplate设置为ViewCell以显示每个父级
  • 将点击的手势识别器添加到ViewCell中的外部视图,该视图调用命令清除或填充父项的子项
  • 设置ListView.ItemTemplate以显示每个子元素
此博客文章介绍了ListView中的分组:

我的GitHub上有一个示例表单项目演示了这一点

您可以在Xamarin表单中使用ListView中的分组头以本机方式执行此操作。首先创建一个分组结构:

public class Grouping<TK, T> : ObservableCollection<T>
{
    public TK Key { get; private set; }

    public Grouping(TK key, IEnumerable<T> items)
    {
        Key = key;
        foreach (var item in items)
            Items.Add(item);
    }
}
在页面的ViewModel中创建以下属性以绑定到ListView

public ObservableCollection<Grouping<SelectParentViewModel, Child>> Parents { get; set; }
publicobservableCollection父对象{get;set;}
初始化父元素以包含每个父元素的新分组以及子元素的新空列表

添加一个以
分组
为参数的命令。该命令首先翻转分组键的选定属性。然后检查选定特性的新值:

  • 如果为true,则->填充子元素
  • 如果为false,则->清除子元素
在您的ListView中

  • 将ItemsSource属性绑定到Categories属性,并将IsGroupInEnabled设置为“True”
  • 将ListView.GroupHeaderTemplate设置为ViewCell以显示每个父级
  • 将点击的手势识别器添加到ViewCell中的外部视图,该视图调用命令清除或填充父项的子项
  • 设置ListView.ItemTemplate以显示每个子元素
此博客文章介绍了ListView中的分组:

我的GitHub上有一个示例表单项目演示了这一点

我遇到了类似的问题,并使用自定义控件使其正常工作

如果使用Xaml创建“ExpandableView”内容视图,如:

<ContentView xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="MyProject.CustomControls.ExpandableView">
    <StackLayout  x:Name="Layout" Orientation="Vertical" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
        <StackLayout x:Name="SummaryRegion">               
        <StackLayout x:Name="DetailsRegion"/>
    </StackLayout>
</ContentView>
然后在页面上,在列表视图中包装如下内容:

<CustomControls:ExpandableView>
   <CustomControls:ExpandableView.Summary>
       <StackLayout>
          YOUR PARENT HERE 
       </StackLayout>
   </CustomControls:ExpandableView.Summary>
   <CustomControls:ExpandableView.Details>
        <StackLayout>
          YOUR CHILD LIST VIEW HERE
        </StackLayout>
    </CustomControls:ExpandableView.Details>
 </CustomControls:ExpandableView>

你的父母在这里
在此处查看您的子列表

我遇到了类似的问题,并使用自定义控件使其正常工作

如果使用Xaml创建“ExpandableView”内容视图,如:

<ContentView xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="MyProject.CustomControls.ExpandableView">
    <StackLayout  x:Name="Layout" Orientation="Vertical" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
        <StackLayout x:Name="SummaryRegion">               
        <StackLayout x:Name="DetailsRegion"/>
    </StackLayout>
</ContentView>
然后在页面上,在列表视图中包装如下内容:

<CustomControls:ExpandableView>
   <CustomControls:ExpandableView.Summary>
       <StackLayout>
          YOUR PARENT HERE 
       </StackLayout>
   </CustomControls:ExpandableView.Summary>
   <CustomControls:ExpandableView.Details>
        <StackLayout>
          YOUR CHILD LIST VIEW HERE
        </StackLayout>
    </CustomControls:ExpandableView.Details>
 </CustomControls:ExpandableView>

你的父母在这里
在此处查看您的子列表
试一试此树视图:

这很简单。没有自定义渲染

您可以使用以下示例克隆回购:

试试看这棵树:

这很简单。没有自定义渲染

您可以使用以下示例克隆回购:

您使用的是Android、iOS还是Xamarin表单?您可以在Android中执行此操作,但在iOS或窗体中不必编写自定义控件。@Jason我使用的是Xamarin窗体。您不能在窗体中以本机方式执行此操作,因为iOS中没有本机控件可供其映射。可以编写自定义控件,也可以编写自定义渲染器。关于这个问题有很多讨论,;或者看看这个:@Jason如果你想把它作为一个答案,我可以标记它。你使用的是Android、iOS还是Xamarin表单?您可以在Android中执行此操作,但在iOS或窗体中不必编写自定义控件。@Jason我使用的是Xamarin窗体。您不能在窗体中以本机方式执行此操作,因为iOS中没有本机控件可供其映射。可以编写自定义控件,也可以编写自定义渲染器。关于这个问题有很多讨论,;或者看看这个:@Jason如果你想把这个作为答案,我可以标记它。