使用自定义类对ListView进行数据绑定

时间:2019-01-20 18:04:29

标签: c# xaml xamarin data-binding

在xmal中显示时,我想对一个自定义类进行数据绑定,但是在列表视图中什么也没显示。任何指向我所缺少的内容的指针将不胜感激。

  public Transactional()
    {

        string oCustomerLoggedIn = Preferences.Get("uLoginUsername", "default_value");

        int oCustomerLoggedInId = GetCustomerId(oCustomerLoggedIn);



        List<TransactionsList> custTransactions  = ViewCustomerTransactions(oCustomerLoggedInId);




        InitializeComponent();



        listView.SetBinding(ListView.ItemsSourceProperty, new Binding("."));
        listView.BindingContext = custTransactions;
    }





  <ListView x:Name="listView" ItemSelected="OnItemSelected">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <ViewCell.ContextActions>
                        <MenuItem Clicked="OnMore" CommandParameter="{Binding .}" Text="More" />
                        <MenuItem Clicked="OnDelete" CommandParameter="{Binding .}" Text="Delete" IsDestructive="True" />
                    </ViewCell.ContextActions>
                    <StackLayout HorizontalOptions="StartAndExpand" Orientation="Horizontal">
                        <StackLayout Padding="5,0,0,0" VerticalOptions="StartAndExpand" Orientation="Vertical">
                            <Label Text="{Binding .}" VerticalTextAlignment="Center" FontSize="Medium" />
                           </StackLayout>
                    </StackLayout>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

1 个答案:

答案 0 :(得分:1)

尝试一下,在适当的地方重构和修改...

列出项目模型...

using System;

namespace Playpen
{
    public class ListItem
    {
        public string Text { get; set; }
        public string SubText { get; set; }
    }
}

XAML ...

<?xml version="1.0" encoding="utf-8"?>
<ContentPage 
    xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
    xmlns:local="clr-namespace:Playpen" 
    x:Class="Playpen.MainPage">

    <StackLayout VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">               
        <ListView 
            ItemsSource="{Binding DataSource}"
            HasUnevenRows="true"
            HorizontalOptions="FillAndExpand"
            VerticalOptions="FillAndExpand"
            SeparatorColor="Silver">

            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" Padding="10">
                            <Label Text="{Binding Text}" FontSize="Medium" FontAttributes="Bold" LineBreakMode="TailTruncation"
                                TextColor="Black" VerticalOptions="Start" HorizontalOptions="StartAndExpand" />

                            <Label Text="{Binding SubText}" FontSize="Small" Margin="0, 5, 0, 0" LineBreakMode="TailTruncation"
                                TextColor="Gray" VerticalOptions="Start" HorizontalOptions="StartAndExpand" />                

                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </StackLayout>
</ContentPage>

后面的页面代码(您可以根据需要重构为MVVM)...

using System;
using System.Collections.ObjectModel;
using Xamarin.Forms;

namespace Playpen
{
    public partial class MainPage : ContentPage
    {
        public ObservableCollection<ListItem> DataSource { get; set; }

        public MainPage()
        {
            this.BindingContext = this;

            DataSource = new ObservableCollection<ListItem>();

            DataSource.Add(new ListItem() { Text = "Item 1", SubText = "Sub Item Text 1" });
            DataSource.Add(new ListItem() { Text = "Item 2", SubText = "Sub Item Text 2" });
            DataSource.Add(new ListItem() { Text = "Item 3", SubText = "Sub Item Text 3" });

            InitializeComponent();
        }
    }
}