Xamarin, ListView, Как получить значения из флажка в ListView? - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть ListView с Метка и Флажок

Я хочу реализовать список кнопок, который будет получать все проверенные элементы из моего ListView

Это ListView

<ListView ItemsSource="{Binding OCParticipantsTable}" 
HasUnevenRows="True" 
x:Name="dsfdf">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
 <StackLayout>
 <Label Text="{Binding FirstName_}"/>
 <CheckBox/>
 </StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>

Это свойство ItemsSource:

private ObservableCollection<ParticipantsTable> _OCParticipantsTable = 
            new ObservableCollection<ParticipantsTable>();
        public ObservableCollection<ParticipantsTable> OCParticipantsTable
        {
            get { return _OCParticipantsTable; }
            set
            {
                if (_OCParticipantsTable != value)
                {
                    _OCParticipantsTable = value;
                    OnPropertyChanged("ListOfItems");
                }
            }
        }

Как я могу реализовать список кнопок, который будет получать все проверенные элементы из моего ListView ?

Что-то вроде этого:

foreach (var pt in dsfdf.ItemsSource)
            {
                if (pt.CheckBox.IsChecked)
                {
                    // do something...
                }
            }

1 Ответ

2 голосов
/ 14 апреля 2020

Как сказал Джейсон, что вы привязываете свойство IsChecked флажка к свойству, вы можете использовать таблицу OCParticipantsTable для получения всех элементов, для которых свойство IsChecked флажка имеет значение true.

 <ListView
            x:Name="dsfdf"
            HasUnevenRows="True"
            ItemsSource="{Binding OCParticipantsTable}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout Orientation="Horizontal">
                            <Label Text="{Binding name}" />
                            <CheckBox IsChecked="{Binding ischecked}" />
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

        <Button
            x:Name="btn1"
            Clicked="Btn1_Clicked"
            Text="getdata" />

Это модель, имеющая некоторые свойства Пожалуйста, укажите одно свойство bool для привязки CheckBox и реализации интерфейса INotifyPropertychanged для уведомления об измененных данных.

 public class ParticipantsTable:ViewModelBase
{
    public string name { get; set; }
    private bool _ischecked;
    public bool ischecked
    {
        get { return _ischecked; }
        set
        {
            _ischecked = value;
            RaisePropertyChanged("ischecked");
        }
    }
}

ViewModelBase реализует INotifyPropertyChanged:

public class ViewModelBase : INotifyPropertyChanged
{

    public event PropertyChangedEventHandler PropertyChanged;

    public void RaisePropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}
 public partial class Page15 : ContentPage
{
   public ObservableCollection<ParticipantsTable> OCParticipantsTable { get; set; }
    public Page15()
    {
        InitializeComponent();

        OCParticipantsTable = new ObservableCollection<ParticipantsTable>()
        {
            new ParticipantsTable(){name="cherry",ischecked=false },
             new ParticipantsTable(){name="barry",ischecked=true },
              new ParticipantsTable(){name="annine",ischecked=false },
               new ParticipantsTable(){name="wendy",ischecked=false },
               new ParticipantsTable(){name="leo",ischecked=true },
               new ParticipantsTable(){name="alex",ischecked=false }
        };
        this.BindingContext = this;
    }

    private void Btn1_Clicked(object sender, EventArgs e)
    {
        foreach(var pt in OCParticipantsTable)
        {
            if(pt.ischecked)
            {
                //do something you want to do
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...