Multi-Select ListView - PullRequest
       21

Multi-Select ListView

0 голосов
/ 15 марта 2019

Это мое представление списка, оно должно содержать список действий, полученных из моей базы данных 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.Result;
           lstActivity.ItemsSource = result;
           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
      }
 }
    }

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

Ответы [ 2 ]

0 голосов
/ 16 марта 2019

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

0 голосов
/ 15 марта 2019

ваш 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();

вам также нужно иметь ссылку на уровень класса для результата

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

public void Get_Activities()
{
    ...
    result = getActivity.Result;
    ...
...