Просмотр списка с несколькими вариантами выбора

#xamarin #xamarin.forms #xamarin.android #xamarin.ios #multi-select

#xamarin #xamarin.forms #xamarin.android #xamarin.ios #множественный выбор

Вопрос:

Это мой просмотр списка, он должен содержать список действий, полученных из моей базы данных SQLite:

 <ListView SeparatorVisibility="None" x:Name="lstActivity" HasUnevenRows="True">
   <ListView.ItemTemplate>
       <DataTemplate>
           <ViewCell>
               <Frame StyleClass="lstframe" CornerRadius="0" BorderColor="Transparent" HasShadow="False">
                   <StackLayout StyleClass="lstContainer" VerticalOptions="CenterAndExpand">
                       <Grid>
                           <Label StyleClass="lstActivityName" Grid.Row="0" Grid.Column="0" Text="{Binding ActivityDescription}">
                               <Label.FontFamily>
                                    <OnPlatform x:TypeArguments="x:String">
                                        <On Platform="Android" Value="Poppins-Regular.otf#Poppins-Regular"/>
                                     </OnPlatform>
                                </Label.FontFamily>
                           </Label>
                           <Switch Grid.Row="0" Grid.Column="1" IsToggled="{Binding Selected}" />
                       </Grid>
                   </StackLayout>
               </Frame>
            </ViewCell>
       </DataTemplate>
    </ListView.ItemTemplate>
 </ListView>
  

Вот как я заполняю представление списка, это вернет по крайней мере пять (5) действий:

 public void Get_Activities()
{
   try
   {
       var db = DependencyService.Get<ISQLiteDB>();
       var conn = db.GetConnection();

       var getActivity = conn.QueryAsync<ActivityTable>("SELECT * FROM tblActivity WHERE Deleted != '1' ORDER BY ActivityDescription");
       var resultCount = getActivity.Result.Count;

       if (resultCount > 0)
       {
           var result = getActivity.Resu<
           lstActivity.ItemsSource = resu<
           lstActivity.IsVisible = true;
       }
       else
       {
           lstActivity.IsVisible = false;
       }
    }
    catch (Exception ex)
    {
       //Crashes.TrackError(ex);
    }
}
  

Привязка выбранного элемента:

 public class SelectData
{
   public bool Selected { get; set; }
}
  

Получение выбранных элементов по щелчку:

 private void BtnClose_Clicked(object sender, EventArgs e)
{
   foreach (var x in result)
   {
      if (x.Selected)
      {
         // do something with the selected items
      }
 }
    }
  

Я опубликовал еще один вопрос, касающийся просмотра списка с несколькими вариантами выбора. Моя проблема в том, что я не знаю, как действовать, когда я использую предоставленные мне ответы. Как я могу получить выбранные значения, потому что я сохраню выбранные значения в своей базе данных?

Комментарии:

1. вы привязываете переключатель к своей модели, поэтому, чтобы получить выбранные элементы, просто получите элементы в вашей модели, которые отмечены как выбранные

2. @Jason можешь показать мне, как это делается?

Ответ №1:

ваш Switch привязан к Selected свойству вашей модели. Просто выполните итерацию (или используйте LINQ), чтобы получить выбранные элементы.

 // you need to maintain a reference to result
foreach(var x in result)
{
  if (x.Selected) 
  {
    // do something with the selected items
  }
}
  

LINQ

 var selected = result.Where(x => x.Selected).ToList();
  

вам также потребуется ссылка на уровне класса для result

 // you will need to change this to reflect the actual type of result
List<MyClass> resu<

public void Get_Activities()
{
    ...
    result = getActivity.Resu<
    ...
  

Комментарии:

1. Куда мне это поместить?

2. где бы вы ни хотели обработать выбранные элементы

3. Я обновил свой вопрос, я получаю сообщение об ошибке при получении выбранного элемента

4. «ошибка» не является полезным описанием проблемы

5. Результат. Любой (x => x.Выбранный) будет равен false, если ничего не выбрано

Ответ №2:

Для просмотра списка с несколькими вариантами выбора я написал рабочий пример в своем блоге. Надеюсь, это поможет: https://androidwithashray.blogspot.com/2018/03/multiselect-list-view-using-xamarin.html?view=flipcard