C# Xamarin表单绑定未显示在ListView上

C# Xamarin表单绑定未显示在ListView上,c#,xaml,listview,xamarin.forms,C#,Xaml,Listview,Xamarin.forms,我是Xamarin的新手,我正在尝试将我的ViewModel绑定到视图,但我还不能这样做 这是密码 (模型) (可观测模型) (视图模型) 名称空间CadastroProdutos { 公共类ListProdutViewModel { 可观测采集产品; 公共列表ProdutoViewModel() { produtos=新的ObservableCollection(); } 公共可观测采集产品 { 设置 { 如果(值!=produtos) { 产品=价值; } } 得到 { 返回产品; } }

我是Xamarin的新手,我正在尝试将我的ViewModel绑定到视图,但我还不能这样做

这是密码

(模型)

(可观测模型)

(视图模型)

名称空间CadastroProdutos
{
公共类ListProdutViewModel
{
可观测采集产品;
公共列表ProdutoViewModel()
{
produtos=新的ObservableCollection();
}
公共可观测采集产品
{
设置
{
如果(值!=produtos)
{
产品=价值;
}
}
得到
{
返回产品;
}
}
}
}
(视图)


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


提前感谢。

您还不太了解MVVM方法,但已经基本了解了。您不需要使用
observateProduto
类。您可以将您的
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));
    }
}
您应该在viewmodel中包含
产品的
ObservableCollection
。我看你已经做到了。我已经编辑了一点。您可能需要小心在集合上完全重置您的
observateCollection

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;
            }
        }
    }
}
名称空间CadastroProdutos
{
公共类ListProdutViewModel
{
可观测采集产品;
公共列表ProdutoViewModel()
{
produtos=新的ObservableCollection();
}
公共可观测采集产品
{
设置
{
如果(值!=produtos)
{
产品=价值;
}
}
得到
{
返回产品;
}
}
}
}

注意:您需要将项目添加到您的
ObservableCollectionon
中。

您的ObservableProduto错误,仅包含1个Produto(而不是构造函数中编写的3个)。。。您不需要为ObservableCollection创建get/set,因为它已经在构造函数中创建了。。。但这无论如何也解决不了你的问题…谢谢你,先生!更改后出现错误“类型为'Xamarin.Forms.TextCell'的对象无法转换为类型为'Xamarin.Forms.View'”,这是因为
TextCell
位于
StackLayout
中。移除
堆栈布局
。您只需要
TextCell
ListView
显示的所有内容都需要是某种形式的单元格或继承自
ViewCell
,而
StackLayout
显示的所有内容都需要是某种形式的
视图。
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>
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));
    }
}
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;
            }
        }
    }
}