Можно ли написать некоторую логику для ячейки вида и получить значение из этого поля этой ячейки? - PullRequest
0 голосов
/ 06 января 2019

Можно ли создать ListView с ViewCells, который будет содержать два Buttons и Label, первая кнопка будет "+", вторая "-", а метка будет счетчиком, который покажет сколько кнопок «+» было нажато.

Затем я хочу иметь возможность получить из моего списка просмотра элемент, привязанный к этой ячейке просмотра, и информацию о том, сколько этот элемент был выбран.

На данный момент я создал StackLayout, заполненный Views, который "высмеивает" Viewcells. Это решение очень плохо для многих предметов, потому что мне нужно создать много Views (это займет несколько секунд).

Итак, я хотел бы решить проблему с помощью ListView, но я не знаю, как этого добиться. Или, может быть, у вас есть лучшее решение, чем использование списка?

1 Ответ

0 голосов
/ 06 января 2019

это должно быть тривиально. Сначала создайте структуру данных для хранения ваших данных

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

<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;
...