繁体   English   中英

Xamarin表单绑定未显示在ListView上

[英]Xamarin Forms Binding not showing on ListView

我是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>

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

提前致谢。

您不太了解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));
    }
}

你应该包含ObservableCollectionProduto在一个视图模型秒。 我知道你已经做到了。 我已经编辑了一下。 您可能需要谨慎地完全重置某个集合上的ObservableCollection

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM