Расширяемый ListView с различными дочерними элементами в формах Xamarin - PullRequest
0 голосов
/ 28 сентября 2018

любые предложения по реализации расширяемого представления списка с различными дочерними представлениями в формах Xamarin.Может ли кто-нибудь помочь мне в этом?

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

XAML

   <ListView ItemsSource="{Binding YOUR_SOURCE}" SeparatorVisibility="Default" 
             HasUnevenRows="True" ItemSelected="MyList_ItemSelected"> 
      <ListView.ItemTemplate>
          <DataTemplate>
             <ViewCell>
                <Frame>
                   <StackLayout>
                      <Label Text="My Heading"/>
                   </StackLayout>

                   <StackLayout x:Name="moreItemStack" Orientation="Horizontal" 
                                IsVisible="false">
                       <Label Text="child 1"/>
                       <Label Text="child 2"/>
                   </StackLayout>
               </Frame>
            </ViewCell>
         </DataTemplate>
      </ListView.ItemTemplate>
    <ListView>

C #

  private void MyList_ItemSelected(object sender, SelectedItemChangedEventArgs e)
  {
      var myItem = e.SelectedItem; 
      moreItemStack.IsVisible = true;          
  }

@ user3932639 Вот и все

ПРИМЕЧАНИЕ. Это былонаписано для уточнения, проверено.

0 голосов
/ 28 сентября 2018

Чтобы использовать разные шаблоны для разных ячеек, для которых вы хотите использовать DataTemplateSelector, это задокументировано здесь: Создание Xamarin.Forms DataTemplateSelector

Сначала определите его в отдельном классе:

public class PersonDataTemplateSelector : DataTemplateSelector
{
  public DataTemplate ValidTemplate { get; set; }
  public DataTemplate InvalidTemplate { get; set; }

  protected override DataTemplate OnSelectTemplate (object item, BindableObject container)
  {
    return ((Person)item).DateOfBirth.Year >= 1980 ? ValidTemplate : InvalidTemplate;
  }
}

Затем добавьте его к ресурсам вашей страницы:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:Selector;assembly=Selector" x:Class="Selector.HomePage">
    <ContentPage.Resources>
        <ResourceDictionary>
            <DataTemplate x:Key="validPersonTemplate">
                <ViewCell>
                   ...
                </ViewCell>
            </DataTemplate>
            <DataTemplate x:Key="invalidPersonTemplate">
                <ViewCell>
                   ...
                </ViewCell>
            </DataTemplate>
            <local:PersonDataTemplateSelector x:Key="personDataTemplateSelector"
                ValidTemplate="{StaticResource validPersonTemplate}"
                InvalidTemplate="{StaticResource invalidPersonTemplate}" />
        </ResourceDictionary>
    </ContentPage.Resources>
  ...
</ContentPage>

А затем просто используйте его в своем списке:

<ListView x:Name="listView" ItemTemplate="{StaticResource personDataTemplateSelector}" />

Чтобы иметь возможность расширять / скрывать ячейки,вам нужно:

  • добавить свойство IsExpanded в ViewModel определенного элемента списка
  • изменить его на true / false для события ItemSelected вашего списка
  • bindвидимость представления, которое вы хотите скрыть / развернуть до значения IsExpanded
...