当前上下文和数据绑定

时间:2016-09-08 13:40:53

标签: c# xaml xamarin

我尝试在Xamarin应用程序列表中使用数据绑定。 我关注:https://developer.xamarin.com/guides/xamarin-forms/user-interface/listview/data-and-databinding/。 Visual Studio给我这个错误:CS0103 C#名称" ELementView"在当前上下文中不存在。 我认为这是关于xmlns:xaml fil中的本地问题,但我不知道。

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:App4;assembly=listeElements"
             x:Class="App4.Page1"
             Title="ListView Demo Page">

    <ListView x:Name="ELementView">
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextCell Text="{Binding Name}" />
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

</ContentPage>

listeElements代码:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;

namespace App4
{
    public class Element
    {
        private string element;

        public string Name
        {
            get { return element; }
            set { element = value; }
        }

        ObservableCollection<Element> Elements = new ObservableCollection<Element>();
        public void ElementListPage()
        {
            ELementView.ItemsSource = Elements;
            Elements.Add(new Element { Name = "oooo" });
        }
    }



};

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

仅仅给出ListView一个名字并不意味着你可以从任何地方引用它。您现在可以从ELementView XAML页面的代码隐藏中引用Page1

要到达那里,请打开解决方案窗口,转到Page1.xaml点击其左侧的箭头,然后双击Page1.xaml.cs

在此页面中,您可以执行以下操作:

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

public Page1()
{
   InitializeComponent();

   ObservableCollection<Element> Elements = new ObservableCollection<Element>();

   ELementView.ItemsSource = Elements;
   Elements.Add(new Element { Name = "oooo" });
}

虽然这可行,但它可能不是最好的方法。您正在尝试使用MVVM,这很好!但你可以更进一步。

也许尝试使用像MvvmCross或FreshMvvm这样的MVVM框架。我后来做了一篇博文。你可以找到它here。虽然新版本已经问世,但这应该可以让您从基础开始。

答案 1 :(得分:0)

你也可以使用它:

public Page1()
{
   InitializeComponent();
   Elemenet e = new Element();
   e.ElementListPage();
   this.BindingContext = e;
}

但请确保您的ObservableCollection<Element>{get; set;};

然后你可以像这样添加ItemsSource - 绑定到你的ListView

<ListView ItemsSource="{Binding Elements}">

当您为DataContext定义Page1时,它将在您的DataContext中找到一个名为Elements的属性(它是类Element) - 在那里它获取ElementsCollection并添加Name到你的CellTemplate