在 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");
}
}
并且您必须对其他属性执行相同的操作
我正在尝试在 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");
}
}
并且您必须对其他属性执行相同的操作