是否可以为视单元编写一些逻辑并从该视单元字段获取值?

时间:2019-01-06 18:21:55

标签: c# listview xamarin xamarin.forms datatemplate

是否可以用ListView创建一个ViewCells并包含两个ButtonsLabel,第一个按钮为“ +”,第二个按钮为“-”和一个标签将是一个计数器,该计数器将显示已点击了多少“ +”按钮。

然后,我希望能够从列表视图中获得绑定到该视单元的项目以及有关已选择该项目的信息。

现在,我创建了一个StackLayout,其中填充了Views,也就是“嘲笑” Viewcells。对于许多项目来说,这种解决方案太糟糕了,因为我必须创建许多Views(需要几秒钟)。

因此,我想使用ListView解决问题,但我不知道如何实现。或者,也许您有比使用列表视图更好的解决方案?

1 个答案:

答案 0 :(得分:1)

这应该是微不足道的。首先,创建一个数据结构来保存您的数据

public class MyData : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;  

    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")  
    {  
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    } 

  private double _count;
  public double Count 
  { 
    get
    { return _count; }
    set
    { 
      _count = value;
      NotifyPropertyChanged();
    }
}

List<MyData> data { get; set; }

您需要使用要在列表中显示的任意多行来初始化它。使用绑定到Count属性的Label和Button创建一个模板

<ListView x:Name="listView" >
  <ListView.ItemTemplate>
    <DataTemplate>
      <ViewCell>
        <StackLayout>
          <Label Text="{Binding Count}" />
          <Button Clicked="Increment" CommandParameter="{Binding .}" Text="+" />
          <Button Clicked="Decrement" CommandParameter="{Binding .}" Text="-" />            
        </StackLayout>
      </ViewCell>
    </DataTemplate>
  </ListView.ItemTemplate>
</ListView>

隐藏在您的代码中

protected void Decrement(object sender, EventArgs args) {
  var b = (Button)sender;
  var data = (MyData)b.CommandParameter;
  data.Count--;
}

protected void Increment(object sender, EventArgs args) {
  var b = (Button)sender;
  var data = (MyData)b.CommandParameter;
  data.Count++;
}

最后,使用绑定或直接分配来设置列表的ItemsSourcee

listView.ItemsSource = data;