Xamarin:更改listview中的标签文本

时间:2017-11-17 08:57:50

标签: xamarin.forms

我是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>

任何人都请建议一个包含工作代码的解决方案。 提前致谢

2 个答案:

答案 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)

我会采取以下两种途径之一:

  1. 使用ObservableCollection作为列表的ItemsSource,当您更改将在列表中反映的项目的属性时,显而易见。列表视图将执行的操作是将旧项目替换为使用新值修改的新项目。您可以搜索ObservableCollection集合的内容。

  2. 我的实际方式,因为我用listviews来对抗低性能的android,这使得它:你可以为ViewCell创建一个自定义类,避免低速绑定,通过代码在自定义ViewCell中设置所有属性。当单元格bindigcontext更改时,更有可能将ItemsSource项目分配给您的单元格,因此您现在可以设置其值并设置它。

    query_string = "parameter_1 LIKE '%text%' | parameter_2 LIKE '%text2%'"
    raw_data.query(query_string )   
    

    //等 ...