Xamarin.forms 如何在xamarin表单中创建具有不可单击标题的列表视图

Xamarin.forms 如何在xamarin表单中创建具有不可单击标题的列表视图,xamarin.forms,Xamarin.forms,我需要使用xamarin表单中的列表视图创建一个带有描述的标题 我需要在列表视图中为标题和详细信息使用单独的样式 我正在尝试以下代码 <ListView RowHeight="74" ItemsSource="{Binding UserEmailList}" IsGroupingEnabled="true"> <ListView.GroupHeaderTemplate> <DataTemplate> <ViewCell

我需要使用xamarin表单中的列表视图创建一个带有描述的标题

我需要在列表视图中为标题和详细信息使用单独的样式

我正在尝试以下代码

<ListView RowHeight="74" ItemsSource="{Binding UserEmailList}" IsGroupingEnabled="true">
    <ListView.GroupHeaderTemplate>
      <DataTemplate>
        <ViewCell>
          <StackLayout Orientation="Vertical">
          <BoxView Style="{StaticResource separator}"></BoxView>
          <Label Text="{Binding Heading}" Style="{StaticResource labelHeaderTitle}"/>
          <BoxView Style="{StaticResource separator}"></BoxView>
          </StackLayout>
        </ViewCell>
      </DataTemplate>
    </ListView.GroupHeaderTemplate>
    <ListView.ItemTemplate>
      <DataTemplate>
        <ViewCell>
            <StackLayout Orientation="Horizontal">
              <Label Text="{Binding EmailAddress}" Style="{StaticResource labelListItem}">
              </Label>
              <Image HeightRequest="16" HorizontalOptions="End" VerticalOptions="Center" Source="arrow.png" Margin="0,0,15,0"></Image>
            </StackLayout>
        </ViewCell>
      </DataTemplate>
    </ListView.ItemTemplate>
  </ListView>

但是,当我使用标记时,列表视图总是显示为空

请让我知道如何在xamarin表单中使用XAML创建此文件

公共类EmailItemViewModel
{
公共字符串标题{get;set;}
公共bool haseEmailAddress{get;set;}
公共字符串电子邮件地址{get;set;}
}
公共类ProfileEmailAddressViewModel:ProfileDetailsViewModel
{
公共配置文件EmailAddressViewModel()
{
Title=“电子邮件地址”;
LoadUserEmailList();
}
私有列表用户电子邮件列表;
公共列表用户电子邮件列表{
获取{return userEmailList;}
设置
{
if(值!=null)
{
userEmailList=值;
}
}
}
私有void LoadUserEmailList()
{
UserEmailList=新列表();
foreach(Employee.Packages中的var包)
{
EmailItemViewModel EmailItemViewModel=新的EmailItemViewModel();
emailItemViewModel.Heading=package.Employer.Name.ToUpper();
emailItemViewModel.EmailAddress=package.WorkEmailAddress;
emailItemViewModel.HasEmailAddress=HasEmailAddress(package.WorkEmailAddress);
添加(emailItemViewModel);
}
EmailItemViewModel personalEmail=新的EmailItemViewModel();
personalEmail.Heading=“personalEmail”;
personalEmail.EmailAddress=Employee.HomeEmailAddress;
personalEmail.HasEmailAddress=HasEmailAddress(Employee.HomeEmailAddress);
添加(个人电子邮件);
}
}
尝试Listview.Header
这样地

这将仅将完全限定的属性名称显示为标题,而不是值,但在描述中不显示任何内容。另外,所有的标题都是一个列表,然后是空的详细信息列表。感谢您的回复,但列表仍然没有按照预期的方式出现。我已经在查询中创建了一个示例xaml和代码,您能告诉我这里可能缺少什么吗。。用
StackLayout
包装标题,我很惊讶它没有抛出编译错误。另外,对于设置,使用可能是更好的方法。当你说“在StackLayout中包装标题”时,请详细说明。对不起,我找不到你。tableview是否可以在XAML中绑定对象列表?HeaderTeamplate ViewCell中有3个视图,将它们包装在StackLayout中。另外,将ViewModel张贴在分组完成的位置。不,不能将列表绑定到TableView。这看起来像一个设置页面,通常没有更多的值,因此建议TableView@Shan已使用查看模型详细信息更新我的查询。您缺少组!!仅仅设置
标题
是不够的,您必须专门对ObservableCollection进行分组。看看手术室
public class EmailItemViewModel
{
    public string Heading { get; set; }
    public bool HasEmailAddress { get; set; }
    public string EmailAddress { get; set; }
}

public class ProfileEmailAddressViewModel : ProfileDetailsViewModel
{
    public ProfileEmailAddressViewModel()
    {
        Title = "Email addresses";
        LoadUserEmailList();
    }

    private List<EmailItemViewModel> userEmailList;

    public List<EmailItemViewModel> UserEmailList {
        get { return userEmailList; }
        set
        {
            if(value != null)
            {
                userEmailList = value;
            }
        }
    }

    private void LoadUserEmailList()
    {
        UserEmailList = new List<EmailItemViewModel>();
        foreach (var package in Employee.Packages)
        {
            EmailItemViewModel emailItemViewModel = new EmailItemViewModel();
            emailItemViewModel.Heading = package.Employer.Name.ToUpper();
            emailItemViewModel.EmailAddress = package.WorkEmailAddress;
            emailItemViewModel.HasEmailAddress = HasEmailAddress(package.WorkEmailAddress);

            UserEmailList.Add(emailItemViewModel);
        }

        EmailItemViewModel personalEmail = new EmailItemViewModel();
        personalEmail.Heading = "PERSONAL EMAIL";
        personalEmail.EmailAddress = Employee.HomeEmailAddress;
        personalEmail.HasEmailAddress = HasEmailAddress(Employee.HomeEmailAddress);

        UserEmailList.Add(personalEmail);
    }
}
        Try Listview.Header 
        like this 

    <ListView RowHeight="74" ItemsSource="{Binding UserEmailList}" IsGroupingEnabled="true">
        <ListView.Header>     
              <BoxView Style="{StaticResource separator}"></BoxView>
              <Label Text="{Binding Heading}" Style="{StaticResource labelHeaderTitle}"/>
              <BoxView Style="{StaticResource separator}"></BoxView>

        </ListView.Header>
        <ListView.ItemTemplate>
          <DataTemplate>
            <ViewCell>
<ViewCell.View>
                <StackLayout Orientation="Horizontal">
                  <Label Text="{Binding EmailAddress}" Style="{StaticResource labelListItem}">
                  </Label>
                  <Image HeightRequest="16" HorizontalOptions="End" VerticalOptions="Center" Source="arrow.png" Margin="0,0,15,0"></Image>
                </StackLayout>
</ViewCell.View>
            </ViewCell>
          </DataTemplate>
        </ListView.ItemTemplate>
      </ListView>