Xamarin表单绑定与名称空间声明错误

时间:2017-05-10 04:41:16

标签: 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()
        {
        }

        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;assembly=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>

获取错误“Xamarin.Forms.Xaml.XamlParseException位置10:6。在xmlns clr-namespace中找不到local:ListProdutoViewModel:CadastroProdutos; assembly = CadastroProdutos”。 我在命名空间声明中缺少什么?

提前致谢。

1 个答案:

答案 0 :(得分:1)

确保ListProdutoViewModel是否在命名空间下开发 - CadastroProdutos。

另外,你不需要提到那里的程序集,local:assembly = CadastroProdutos。因此,请在删除上述汇编代码后尝试运行该应用程序。如下所示,

本地=&#34; CLR-名称空间:CadastroProdutos&#34;