0

ExpandableListView에 대해 알고 있지만 ExpandableListView가 하위 항목으로 항목 목록을 가지고있는 한 볼 수 있습니다. 내가하고 싶은 일은 상위 항목이있는 목록을 가지고 있고, 상위 항목을 클릭하면 펼쳐지고 더 많은 정보가 표시됩니다.확장 가능 목록 항목 레이아웃

참고 : 상위 항목이 확장 될 때 표시되는 레이아웃은 목록이 아닙니다. 그것은 단순한 레이아웃 일 뿐이며 모든 예제에서 ExpandableListView가 List로 하위 항목으로 사용되는 것을 보았으므로이 상황에서 사용할 올바른 컨트롤인지는 확실하지 않습니다.

가능한 해결책 : 나는 ExpandableListView를 사용할 수 있으며 목록에 하나의 하위 항목 만 가질 수 있습니다. 그러나 항목 하나만있는 목록보다 더 멋진 항목을 찾고 있습니다.

ExpandableListView는 여기에서 사용할 올바른 컨트롤입니까?

편집 : 나는 자 마린 기본 (Xamarin.Android)를 사용하고 있지 Xamarin.Forms

Expandable View

답변

0

이있는 경우는 성능 문제를 일으킬 수 있기 때문에 나는 확장 ListView에 사용을 권장하지 않습니다 더 많은 데이터. 구현하려는 경우

는하지만 이하의 절차 :

  1. 모델이 목록에서 목록처럼해야

    public class Model1 { public string Name { get; set; } public List<Model2> Model2Name { get; set; } } public class Model2 { public string Name1 { get; set; } }

    여기

를 코드를 입력

그런 다음 XAML 이제 당신이 모델을 포장해야

<ListView 
HasUnevenRows="True" 
ItemSelected="ItemSelected" 
ItemsSource="{Binding DataList}"> 
<ListView.ItemTemplate> 
<DataTemplate> 
<ViewCell> 
<Grid > 
<Grid.RowDefinitions> 
<RowDefinition Height="Auto"/> 
<RowDefinition Height="Auto"/> 
</Grid.RowDefinitions> 
<Grid.ColumnDefinitions> 
<ColumnDefinition Width="9*"/> 
</Grid.ColumnDefinitions> 
<Label Grid.Row="0" Text="{Binding Name}" YAlign="Center"/> 
<ListView Grid.Row="1" 
IsVisible="{Binding ListVisibility}" 
SeparatorVisibility="None" 
ItemSelected="ProductSelected" 
HeightRequest="220" 
BackgroundColor="#f2f2f2" 
HorizontalOptions="FillAndExpand" 
ItemsSource="{Binding Model.Products}"> 
<ListView.ItemTemplate> 
<DataTemplate> 
<ViewCell> 
<Grid > 
<Grid.RowDefinitions> 
<RowDefinition Height="Auto"/> 
<RowDefinition Height="Auto"/> 
</Grid.RowDefinitions> 
<Label Grid.Row="0" Grid.Column="0" Text="{Binding Name}" 
YAlign="Center" /> 
</Grid> 
</ViewCell> 
</DataTemplate> 
</ListView.ItemTemplate> 
</ListView> 
</Grid> 
</ViewCell> 
</DataTemplate> 
</ListView.ItemTemplate> 
</ListView>

같이해야한다. 그것을 위해 당신은 다음과 같은 래퍼 클래스를 작성해야 다음과 같이

private List<WrapperModel<ProductCategoryModel>> dataList; 
    public List<WrapperModel<ProductCategoryModel>> DataList 
    { 
     get { return dataList; } 
     set 
     { 
      dataList = value; 
      OnPropertyChanged("DataList"); 
     } 
    } 

지금 목록을 초기화 :

public class WrapperModel<T> : INotifyPropertyChanged 
{ 
    public T Model { get; set; } 
    public event PropertyChangedEventHandler PropertyChanged = delegate { }; 
    bool listVisibility = false; 
    public bool ListVisibility 
    { 
     get 
     { 
      return listVisibility; 
     } 
     set 
     { 
      if (listVisibility != value) 
      { 
       listVisibility = value; 
       PropertyChanged(this, new PropertyChangedEventArgs("ListVisibility")); 
      } 
     } 
    } 
} 

을 지금의 ViewModel에 다음과 같이, 당신은 당신의 목록 속성을 선언해야

foreach (var item in List) 
{ 
DataList.Add(new WrapperModel<ModelName> 
{ Model = item, ListVisibility = false}); 
         } 

이제 목록이 접힌 상태가됩니다. 당신이 의심이있는 경우

private void ItemSelected(object sender, SelectedItemChangedEventArgs e) 
    { 
     if (e.SelectedItem == null) return; 

     var tappedItem = (WrapperModel<ModelName>)e.SelectedItem; 
     tappedItem.ListVisibility = !tappedItem.ListVisibility; 
     ((ListView)sender).SelectedItem = null; 
    } 

은 나를

을 알려 주시기 바랍니다 다음과 같이 각 항목을 클릭에 내부 목록을 얻으려면, 당신은 ItemSelected을 설정해야
관련 문제