我正在尝试在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 ......我才会看到结果。这是对的吗? 谢谢!
答案 0 :(得分:2)
Xamarin.Forms MVVM基础结构中的重要部分是,在更改属性值时需要显式调用PropertyChanged。
因此,您需要修改ViewModel代码,以便在属性更改时引发PropertyChanged
事件。请参阅以下示例。
private string name;
public string Name
{
get { return name; }
set
{
name = value;
OnPropertyChanged("Name");
}
}
你必须对你的其他财产做同样的事情