在 xamarin.forms 中点击了列表视图项目

Listview item tapped in xamarin.forms

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

型号:产品有 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...,我才能看到结果。这是正确的吗? 谢谢!

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

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

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

并且您必须对其他属性执行相同的操作