我是xamarin的新手,我在我的xamarin表单项目中面临一个问题。 我在listview-viewcell中有一个Label和2个图像。我想更改图片上的标签文字。如果单击“喜欢”,则将标签文本值增加1,如果单击“不喜欢”,则减少1。我使用标签x:name,但在课堂上无法访问。我该如何解决这个问题?
<StackLayout>
<ListView>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<Label
Text="{Binding likeCount}"
x:Name="likecount"/>
<Image Source="like.png">
<Image.GestureRecognizers>
<TapGestureRecognizer
Tapped="LikeOrUnlikeTweet"
CommandParameter="{Binding .}"
NumberOfTapsRequired="1" />
</Image.GestureRecognizers>
</Image
<Image Source="unlike.png">
<Image.GestureRecognizers>
<TapGestureRecognizer
Tapped="LikeOrUnlikeTweet"
CommandParameter="{Binding .}"
NumberOfTapsRequired="1" />
</Image.GestureRecognizers>
</Image
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
任何人都请建议一个包含工作代码的解决方案。 提前致谢
答案 0 :(得分:0)
首先需要在VM中创建命令,需要更改如下:
<TapGestureRecognizer
Tapped="{Binding Source={x:Reference YourListName}, Path=BindingContext.LikeOrUnlikeTweetCommand}"
CommandParameter="{Binding .}"
NumberOfTapsRequired="1" />
ViewModel代码
public ICommand LikeOrUnlikeTweetCommand { get; }
在构造函数中初始化
LikeOrUnlikeTweetCommand = new Command<YourModelDto>(LikeOrUnlikeTweet);
此处的功能代码可以更改您的计数值和更新列表。
void LikeOrUnlikeTweet(YourModelDto yourModelDto)
{
....
}
答案 1 :(得分:0)
我会采取以下两种途径之一:
使用ObservableCollection作为列表的ItemsSource,当您更改将在列表中反映的项目的属性时,显而易见。列表视图将执行的操作是将旧项目替换为使用新值修改的新项目。您可以搜索ObservableCollection集合的内容。
我的实际方式,因为我用listviews来对抗低性能的android,这使得它:你可以为ViewCell创建一个自定义类,避免低速绑定,通过代码在自定义ViewCell中设置所有属性。当单元格bindigcontext更改时,更有可能将ItemsSource项目分配给您的单元格,因此您现在可以设置其值并设置它。
query_string = "parameter_1 LIKE '%text%' | parameter_2 LIKE '%text2%'"
raw_data.query(query_string )
//等 ...