Xamarin表单将不同的模型绑定到XAML中的Listview头

Xamarin表单将不同的模型绑定到XAML中的Listview头,listview,binding,header,xamarin.forms,Listview,Binding,Header,Xamarin.forms,如何将Listview头中的属性绑定到Xamarin表单中完全不同的模型?我将listview头属性设置为 Header={Binding newModel} 然后用 <ListView.Header> <StackLayout Orientation="Horizontal"> <Label Text="{Binding newModel.FullNameLastFirst}" /> </StackLayout&g

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

Header={Binding newModel}
然后用

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


但这并不能解决任何问题。不过,我确实将listview项模型设置为另一个模型,这很好。我需要将listview头绑定到一个单独的模型

您可以使用
x:Reference
扩展名
x:Reference
允许您将UIElement的任何属性使用到另一个属性中(我们将使用
BindingContext

i、 e:

您的视图模型:

class YourViewModel
{
    public object HeaderModel{get;set;}
    public List<object> ListItems{get;set;}
}
class YourViewModel
{
公共对象HeaderModel{get;set;}
公共列表列表项{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>

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

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

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

...
要数据绑定Xamarin表单ListView标头,请使用DataTemplate,如下所示:

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

...

这给了我一个System.ArgumentException“NameScope参数name:name中已经存在具有相同键的元素”。为什么我无法为页面指定x:名称?。。。。这是由于代码隐藏中的另一个错误(我的构造函数链两次调用InitializeComponent()。它正在工作,谢谢:)