C# Xamarin可扩展列表视图
在Xamarin有这样的本地人吗?有一个父元素列表,当其中一个被单击时,子元素列表就会出现在它下面 前 我尝试将自定义:listview放在自定义:listview中。计划是在单击时更改可见性,但我得到以下错误: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中的分组
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,则->清除子元素
- 将ItemsSource属性绑定到Categories属性,并将IsGroupInEnabled设置为“True”
- 将ListView.GroupHeaderTemplate设置为ViewCell以显示每个父级
- 将点击的手势识别器添加到ViewCell中的外部视图,该视图调用命令清除或填充父项的子项
- 设置ListView.ItemTemplate以显示每个子元素
您可以在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,则->清除子元素
- 将ItemsSource属性绑定到Categories属性,并将IsGroupInEnabled设置为“True”
- 将ListView.GroupHeaderTemplate设置为ViewCell以显示每个父级
- 将点击的手势识别器添加到ViewCell中的外部视图,该视图调用命令清除或填充父项的子项
- 设置ListView.ItemTemplate以显示每个子元素
我遇到了类似的问题,并使用自定义控件使其正常工作 如果使用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如果你想把这个作为答案,我可以标记它。