Xamarin表示在XAML中将不同的模型绑定到Listview标头

时间:2016-08-10 20:02:50

标签: listview binding header xamarin.forms

如何将Listview标头内的属性绑定到Xamarin表单中完全不同的模型?我将listview标题属性设置为

Header={Binding newModel}

然后使用

 <ListView.Header>
     <StackLayout Orientation="Horizontal">
       <Label Text="{Binding newModel.FullNameLastFirst}" />
     </StackLayout>
 </ListView.Header>

但这并不能解决任何问题。但我确实将listview项目模型设置为另一个模型,并且工作正常。我需要将listview标头绑定到单独的模型。

2 个答案:

答案 0 :(得分:0)

您可以使用x:Reference扩展程序。 x:Reference允许您将UIElement的任何属性用于另一个属性(我们将使用BindingContext)。

即:

您的视图模型:

class YourViewModel
{
    public object HeaderModel{get;set;}
    public List<object> ListItems{get;set;}
}

您的Xaml页面

<ContentPage x:Name="page">
    <ContentPage.BindingContext>
        <local.YourViewModel/>
    </ContentPage.BindingContext/>

    <ListView ItemsSource="{Binding ListItems}">
        <ListView.HeaderTemplate>
            <DataTemplate>
              <Grid BindingContext="{Binding BindingContext.HeaderModel,Source={x:Reference page}}">
                <!--Content goes here-->
              </Grid>
            </DataTemplate>
        </ListView.HeaderTemplate>
        <ListView.ItemTemplate>
            <DataTemplate>
              <ViewCell>
                <!--Cell template goes here-->
              </ViewCell>
            </DataTemplate>
          </ListView.ItemTemplate>
    </ListView>
</ContentPage>

答案 1 :(得分:0)

重要的是要理解,如果您想要执行数据绑定,则不能只填充Header属性。要进行数据绑定,您必须添加标题数据模板。

下面的XAML不会执行任何绑定。这只是在标题中添加内容:

<ListView>
...
   <ListView.Header>
      <StackLayout Orientation="Horizontal">
         <Label Text="{Binding newModel.FullNameLastFirst}" />
      </StackLayout>
   </ListView.Header>

对数据绑定Xamarin Forms ListView Header使用DataTemplate,如下所示:

<ListView>
...
   <ListView.HeaderTemplate>
      <DataTemplate>
         <StackLayout Orientation="Horizontal">
            <Label Text="{Binding newModel.FullNameLastFirst}" />
         </StackLayout>
      </DataTemplate>
   </ListView.Header>