Xamarin表单将不同的模型绑定到XAML中的Listview头
如何将Listview头中的属性绑定到Xamarin表单中完全不同的模型?我将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
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()。它正在工作,谢谢:)