Listview项目在xamarin.forms中点击

时间:2016-03-14 08:48:57

标签: listview xamarin.forms uitapgesturerecognizer

我正在尝试在Xamarin.Forms和XAML中开发一个应用程序,当我点击LV时我需要捕获一个事件。 我想要的应用程序是当用户点击列表上的项目时更改单元格(或单元格内的StackLayout)的颜色。 我正在尝试在listview上实现OnItemTapped属性,但是当我按下Item时没有任何反应。 我的代码非常简单:

型号:具有2个品牌,名称和颜色的产品。

public class Product: INotifyPropertyChanged
    {
        #region INotifyPropertyChanged implementation

        public event PropertyChangedEventHandler PropertyChanged;

        #endregion

        public Product ()
        {
        }

        public string Name { get; set; }
        public bool Buy { get; set; }
        public  Color micolor { get; set; }

        //Método para actualizar los cambios
        protected virtual void OnPropertyChanged (string propertyName)
        {
            if (PropertyChanged == null)
                return;

            PropertyChanged (this, new PropertyChangedEventArgs (propertyName));
        }
    }

XAML:只有一个包含两个绑定的列表:标签中的名称和SL中的颜色

<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="pruebalv.MyPage1">
    <ContentPage.Content>
     <ListView  x:Name="listView"
     ItemTapped="OmItemTapped"
     >

            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout 
                        Orientation="Vertical"
                        BackgroundColor ="{Binding micolor}">
                                <Label Text="{Binding Name}"/>
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </ContentPage.Content>
</ContentPage>

在.cs代码后面:我创建了产品(它只是一个样本)并实现了轻敲的项目。点击项目时,我想更改所按项目的颜色属性。

public void OmItemTapped (object o, ItemTappedEventArgs e)
        {
            var dataItem = e.Item as Product;
            dataItem.micolor  = Color.Green;
            dataItem.Name  = "Tapped!!";

        }

我创建列表时得到的结果是,当我点击某个项目时没有任何反应。

我错过了什么吗?正如我在教程中所理解的那样,只有ListView的“itemtapped”属性和产品上的InotifyProperty ......我才会看到结果。这是对的吗? 谢谢!

1 个答案:

答案 0 :(得分:2)

Xamarin.Forms MVVM基础结构中的重要部分是,在更改属性值时需要显式调用PropertyChanged。

因此,您需要修改ViewModel代码,以便在属性更改时引发PropertyChanged事件。请参阅以下示例。

    private string name;
    public string Name 
    { 
        get { return name; }
        set 
        {
           name = value;
           OnPropertyChanged("Name");
        }
    }

你必须对你的其他财产做同样的事情