C# 删除和更改ListView视图单元格中的项目
在我正在编写的项目中,我试图这样做,如果用户单击一个选项图标,它会打开一个菜单,用户可以在其中选择删除帖子,并将其从列表中删除,我还想这样做,如果用户单击类似按钮,它会更改图标 我的问题是,我无法找到如何将变量附加到该ViewCell,以便在方法中可以删除它或更新like按钮 我的列表视图是C# 删除和更改ListView视图单元格中的项目,c#,listview,xamarin,xamarin.forms,C#,Listview,Xamarin,Xamarin.forms,在我正在编写的项目中,我试图这样做,如果用户单击一个选项图标,它会打开一个菜单,用户可以在其中选择删除帖子,并将其从列表中删除,我还想这样做,如果用户单击类似按钮,它会更改图标 我的问题是,我无法找到如何将变量附加到该ViewCell,以便在方法中可以删除它或更新like按钮 我的列表视图是 <ListView x:Name="MessageView" HasUnevenRows="True" IsPullToRefreshEnabled="True" Refreshing="Messag
<ListView x:Name="MessageView" HasUnevenRows="True" IsPullToRefreshEnabled="True" Refreshing="MessageView_Refreshing">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout x:Name="MessageLayout" BackgroundColor="White" Margin="10, 10, 10, 0" Padding="10, 10, 15, 10">
<Image Source="options_icon.png" HeightRequest="15" HorizontalOptions="End" Margin="0, 0, 10, 0">
<Image.GestureRecognizers>
<TapGestureRecognizer Command="{Binding OptionClick}"/>
</Image.GestureRecognizers>
</Image>
<Label Text="{Binding Body}" HorizontalOptions="CenterAndExpand" TextColor="Black" FontSize="15" Margin="0, 10, 0, 10"/>
<StackLayout x:Name="MessageFooter" Orientation="Horizontal">
<Image x:Name="LikeSource" Source="{Binding LikeImageSource}" HeightRequest="18" HorizontalOptions="StartAndExpand" Margin="0, 0, 10, 0">
<Image.GestureRecognizers>
<TapGestureRecognizer Command="{Binding LikeClick}" CommandParameter="{Binding .}"/>
</Image.GestureRecognizers>
</Image>
<Label Text="{Binding Timestamp}" TextColor="Black" FontSize="10" HorizontalOptions="EndAndExpand"/>
</StackLayout>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
然后是它背后的代码
public IList<MessageObject> FormatPosts(Page page, INavigation navigation, string json)
{
IList<MessageObject> Posts = new List<MessageObject>() { };
var messages = JsonConvert.DeserializeObject<List<Message>>(json);
foreach (var message in messages)
{
DateTime dateFormat = Convert.ToDateTime(message.TimeStamp);
Posts.Add(new MessageObject
{
Body = message.Body,
OptionClick = new Command(() => ShowOptionActions(page, navigation, message.Id, message.Sender_Id)),
ImageSource = message.Liked == 0 ? "like_icon.png" : "liked_icon.png",
LikeClick = new Command(async (sender) => await LikeMessage(navigation, message.Sender_Id, sender)),,
Timestamp = dateFormat.ToString("MMMM dd, yyyy HH:mm")
});
}
return Posts;
}
public static async void ShowOptionActions(Page page, INavigation navigation, int id, int poster_id)
{
var action = await page.DisplayActionSheet("Message Actions", "Cancel", "Delete");
switch (action)
{
case "Delete":
await DeleteMessage(page, navigation, id);
break;
}
}
public static async Task LikeMessage(INavigation navigation, int id, object message)
{
*Updates database*
if (page_result.Equals("liked"))
{
((MessageObject)message).LikeImageSource = "liked_icon.png";
}
else if (page_result.Equals("unliked"))
{
((MessageObject)message).LikeImageSource = "like_icon.png"; // same as when you haven't liked it yet
}
}
public static async Task DeleteMessage(Page page, INavigation navigation, int id)
{
*Deletes from database*
//Delete post
return;
}
}
public class MessageObject
{
public string Body { get; set; }
public Command OptionClick { get; set; }
public Command LikeClick { get; set; }
public string Timestamp { get; set; }
public string ImageSource { get; set; }
}
public IList formattposts(页面,激活导航,字符串json)
{
IList Posts=新列表(){};
var messages=JsonConvert.DeserializeObject(json);
foreach(消息中的var消息)
{
DateTime dateFormat=Convert.ToDateTime(message.TimeStamp);
添加(新消息对象)
{
Body=message.Body,
OptionClick=new命令(()=>ShowOptionActions(页面、导航、message.Id、message.Sender\u Id)),
ImageSource=message.Liked=0?“like_icon.png”:“Liked_icon.png”,
LikeClick=new命令(异步(发送方)=>wait-LikeMessage(导航,message.sender\u Id,发送方)),,
Timestamp=dateFormat.ToString(“MMMM-dd,yyyy-HH:mm”)
});
}
返回岗位;
}
公共静态异步void ShowOptionActions(第页,激活导航,int-id,int-poster\u-id)
{
var action=wait page.DisplayActionSheet(“消息操作”、“取消”、“删除”);
开关(动作)
{
案例“删除”:
等待删除消息(页面、导航、id);
打破
}
}
公共静态异步任务,如消息(活动导航、int-id、对象消息)
{
*更新数据库*
如果(第页结果等于(“喜欢”))
{
((MessageObject)message.LikeImageSource=“liked_icon.png”;
}
else if(第页结果等于(“未链接”))
{
((MessageObject)message.LikeImageSource=“like_icon.png”;//和您还不喜欢它时一样
}
}
公共静态异步任务DeleteMessage(第页,激活导航,int-id)
{
*从数据库中删除*
//删除帖子
返回;
}
}
公共类消息对象
{
公共字符串体{get;set;}
公共命令选项单击{get;set;}
公共命令,如单击{get;set;}
公共字符串时间戳{get;set;}
公共字符串ImageSource{get;set;}
}
这将把选定的MessageObject作为参数传递给OptionClick命令
<TapGestureRecognizer Command="{Binding OptionClick}" CommandParameter="{Binding .}"/>
我将如何使用它来更改图像源?如果您更新MessageObject ImageSource属性并使用INotifyPropertyChanged,它将自动更新我如何将INotifyPropertyChanged实现为我更新的代码?