Xamarin表单列表视图绑定
现在我试图让一个ListView有一些可绑定的CustomCells。我将XAML中的单元定义为ListView.ItemTemplate下的DataTemplate下的ViewCell。Xamarin表单列表视图绑定
让我们简单地说,我有两个字符串,我代表在单元格中。 ViewCell看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="simpletest.MyPage2">
<ContentPage.Content>
<StackLayout Spacing="10" x:Name="layout" Padding="8,10">
<Label Text="{Binding Something}" />
<ListView x:Name="listView">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Orientation="Horizontal">
<Label Text="{Binding Name}" />
<Label Text="{Binding Price}" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage.Content>
</ContentPage>
我真的很希望保留在XAML中。我不喜欢用C#编写整个事情来把它变成一个膨胀的世界。
我有这个页面的ViewModel,我在代码背后的文件中设置绑定上下文。我的问题如下,我是否定义了一个在C#中扩展ViewCell以绑定数据的类?如前所述,我不想在C#中定义布局。我想以这种方式进行绑定。我想避免引用这些字段,因为代码背后的文件倾向于引用组件。这可能吗?我检查了Xamarin网站,该示例使用了混合代码和XAML(如果我正确解释它)。
编辑1:
我试着写,模仿一些例子文件,但这是远远不够的。没有一段代码可以解释这个文件是代表XAML中ViewCell的文件,并且没有明显的方式让我填充列表而不访问代码隐藏中的列表字段。如果我只是想使用绑定将一些项目添加到此列表中,我错过了什么?
public class ReportedAssignmentCell : ViewCell
{
public ReportedAssignmentCell()
{
}
public static readonly BindableProperty NameProperty = BindableProperty.Create("Name", typeof(string), typeof(ReportedAssignmentCell), "");
public static readonly BindableProperty PriceProperty = BindableProperty.Create("Price", typeof(string), typeof(ReportedAssignmentCell), "");
public string Name
{
get { return (string)GetValue(NameProperty); }
set { SetValue(NameProperty, value); }
}
public string Price
{
get { return (string)GetValue(PriceProperty); }
set { SetValue(NameProperty, value); }
}
}
您需要将ListView
小号ItemSource
属性设置为项目的列表。该项目列表应包含在您的视图中。事情是这样的:
<ListView ItemSource="{Binding ListOfItems}" ...>
...
</ListView>
然后在您的视图模型:
private ObservableCollection<ItemModel> _listOfItems;
public ObservableCollection <ItemModel> ListOfItems {
get { return _listOfItems ?? _listOfItems == new ObservableCollection<ItemModel>; }
set {
if(_listOfItems != value) {
_listOfItems = value;
SetPropertyChanged();
}
}
现在,如果你想使用自定义的ReportedAssignmentCell
你可以,但你也可以只留下StackLayout
和Labels
在那里。尝试设置ItemSource
,就像我上面所描述的那样,使用您发布的当前ListView
XAML并查看是否会给您提供您正在寻找的效果。如果没有,请告诉我。
A ViewCell
是为了容纳其他物品,如StackLayout
s和Labels
。它但不必包含那些Label
将要绑定的所有属性。绑定从ListView.ItemSource
传递到您的ListView.ItemTemplate
。该绑定不需要ViewCell
具有绑定工作的任何特殊属性。我希望这是有道理的。如果不让我知道什么不对。
谢谢,你真的救了我。 –
@why_vincent绝对乐意帮忙 – hvaughan3
你写的代码应该工作正常。如果你想扩展或定制一个'ViewCell',那么你可以用C#代码扩展它,并在你的XAML中引用它,但是你并不需要并且可以完全按照你以前所做的来做。你有特定的问题吗? – hvaughan3
我想我在这里误解了一些根本性的东西。我不知道如何引用该文件,你建议这应该在标签中完成?我也不了解我如何填充列表。我更新了我的问题,使其更加明显。 –
看到我的答案,并让我知道如果你仍然有问题 – hvaughan3