Xamarin表单绑定未在ListView上显示

时间:2017-05-11 23:12:40

标签: c# xaml listview xamarin.forms

我是Xamarin的新手,我正在尝试将我的ViewModel绑定到View,但我还没有这样做。

这是代码。

(型号)

namespace CadastroProdutos
{
    public class Produto
    {
        public string Codigo { get; set; }
        public string Identificacao { get; set; }
        public string Tipo { get; set; }
    }
}

(可观察模型)

namespace CadastroProdutos
{
    public class ObservableProduto : INotifyPropertyChanged
    {
        Produto produto;
        public ObservableProduto()
        {
            produto = new Produto()
            {
                Identificacao = "Primeiro",
                Codigo = "123456"

            };
            produto = new Produto()
            {
                Identificacao = "Segundo",
                Codigo = "123456"

            };
            produto = new Produto()
            {
                Identificacao = "Terceiro",
                Codigo = "123456"

            };
        }

        public event PropertyChangedEventHandler PropertyChanged;

        public string Codigo
        {               
            set
            {
                if (!value.Equals(produto.Codigo, StringComparison.Ordinal))
                {
                    produto.Codigo = value;
                    OnPropertyChanged("Codigo");
                }
            }
            get
            {
                return produto.Codigo;
            }
        }

        public string Identificacao
        {
            set
            {
                if (!value.Equals(produto.Identificacao, StringComparison.Ordinal)) 
                {
                    produto.Identificacao = value;
                    OnPropertyChanged("Identificacao");
                }
            }
            get
            {
                return produto.Identificacao;
            }
        }

        public string Tipo
        {
            set
            {
                if (!value.Equals(produto.Tipo, StringComparison.Ordinal)) 
                {
                    produto.Tipo = value;
                    OnPropertyChanged("Tipo");
                }
            }
            get
            {
                return produto.Tipo;
            }
        }

        void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            var handler = PropertyChanged;
            if (handler == null)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
}

(视图模型)

namespace CadastroProdutos
{
    public class ListProdutoViewModel
    {
        ObservableCollection<ObservableProduto> produtos;

        public ListProdutoViewModel()
        {
            produtos = new ObservableCollection<ObservableProduto>();
        }

        public ObservableCollection<ObservableProduto> Produtos
        {
            set
            {
                if (value != produtos)
                {
                    produtos = value;
                }
            }
            get
            {
                return produtos;
            }
        }
    }
}

(查看)

<?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:CadastroProdutos;"
    x:Class="CadastroProdutos.ListProduto"
    Title="Listagem de Produtos">
    <ContentPage.Content>
        <ListView x:Name="listView" Margin="20,40,20,20" ItemsSource="{Binding Produtos}">
            <ListView.BindingContext>
                <local:ListProdutoViewModel />
            </ListView.BindingContext>
            <ListView.Header>
                <StackLayout Orientation="Vertical" >
                        <Label Text="Produtos" HorizontalOptions="Center"/>
                </StackLayout>
            </ListView.Header>
            <ListView.ItemTemplate>
                <DataTemplate>
                    <StackLayout Orientation="Horizontal" >
                        <TextCell Text="{Binding Identificacao}"/>
                    </StackLayout>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </ContentPage.Content>
</ContentPage>

它不起作用,它没有在列表中显示这些元素。有人能帮助我吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

你不太了解MVVM方法,但你几乎就在那里。您不需要ObservableProduto课程。您可以将Produto课程设为您的模特。

这是您的Produto型号。我继续为你改变了。

namespace CadastroProdutos
{
    public class Produto : INotifyPropertyChanged
    {
        private string codigo;
        public string Codigo 
        { 
            get {return codigo;} 
            set {codigo=value; OnPropertyChanged(); }
        }

        private string identificacao;
        public string Identificacao 
        { 
            get {return identificacao;} 
            set {identificacao=value; OnPropertyChanged(); }
        }

        private string tipo ;
        public string Tipo 
        { 
            get {return tipo;} 
            set {tipo=value; OnPropertyChanged(); }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        void OnPropertyChanged([CallerMemberName]string propertyName = "") =>
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

您应在视图模型中包含ObservableCollection ProdutoObservableCollection个。我看到你做到了。我编辑了一下。您可能需要小心完全重置集合中的namespace CadastroProdutos { public class ListProdutoViewModel { ObservableCollection<Produto> produtos; public ListProdutoViewModel() { produtos = new ObservableCollection<Produto>(); } public ObservableCollection<Produto> Produtos { set { if (value != produtos) { produtos = value; } } get { return produtos; } } } }

ObservableColleciton

注意:您需要向<dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</artifactId> <version>2.1.1</version> <scope>compile</scope> </dependency> 静态添加项目。