728x90
반응형
728x170
■ DataTemplateSelector 클래스에서 데이터 템플리트 선택자를 사용하는 방법을 보여준다.
▶ PersonModel.cs
namespace TestProject
{
/// <summary>
/// 사람 모델
/// </summary>
public class PersonModel
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Property
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 이름 - Name
/// <summary>
/// 이름
/// </summary>
public string Name { get; set; }
#endregion
#region 나이 - Age
/// <summary>
/// 나이
/// </summary>
public int Age { get; set; }
#endregion
#region 위치 - Location
/// <summary>
/// 위치
/// </summary>
public string Location { get; set; }
#endregion
}
}
▶ PersonDataTemplateSelector.cs
namespace TestProject;
/// <summary>
/// 사람 데이터 템플리트 선택자
/// </summary>
public class PersonDataTemplateSelector : DataTemplateSelector
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Property
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 젊은 사람 템플리트 - YoungPersonTemplate
/// <summary>
/// 젊은 사람 템플리트
/// </summary>
public DataTemplate YoungPersonTemplate { get; set; }
#endregion
#region 늙은 사람 템플리트 - OldPersonTemplate
/// <summary>
/// 늙은 사람 템플리트
/// </summary>
public DataTemplate OldPersonTemplate { get; set; }
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Protected
#region 템플리트 선택시 처리하기 - OnSelectTemplate(item, container)
/// <summary>
/// 템플리트 선택시 처리하기
/// </summary>
/// <param name="item">항목</param>
/// <param name="container">컨테이너</param>
/// <returns>선택 데이터 템플리트</returns>
protected override DataTemplate OnSelectTemplate(object item, BindableObject container)
{
return ((PersonModel)item).Age < 35 ? YoungPersonTemplate : OldPersonTemplate;
}
#endregion
}
▶ MainPage.xaml
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage x:Class="TestProject.MainPage"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:TestProject">
<ContentPage.Resources>
<DataTemplate x:Key="YoungPersonDataTemplateKey">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label Grid.Column="0"
FontAttributes="Bold"
Text="{Binding Name}" />
<Label Grid.Column="1"
TextColor="Blue"
Text="{Binding Age}" />
<Label Grid.Column="2"
HorizontalTextAlignment="End"
Text="{Binding Location}" />
</Grid>
</DataTemplate>
<DataTemplate x:Key="OldPersonDataTemplateKey">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label Grid.Column="0"
FontAttributes="Bold"
Text="{Binding Name}" />
<Label Grid.Column="1"
TextColor="Red"
Text="{Binding Age}" />
<Label Grid.Column="2"
HorizontalTextAlignment="End"
Text="{Binding Location}" />
</Grid>
</DataTemplate>
<local:PersonDataTemplateSelector x:Key="PersonDataTemplateSelectorKey"
YoungPersonTemplate="{StaticResource YoungPersonDataTemplateKey}"
OldPersonTemplate="{StaticResource OldPersonDataTemplateKey}" />
</ContentPage.Resources>
<CollectionView
ItemTemplate="{StaticResource PersonDataTemplateSelectorKey}"
HorizontalOptions="Center"
VerticalOptions="Center"
Margin="10">
<CollectionView.ItemsSource>
<x:Array Type="{x:Type local:PersonModel}">
<local:PersonModel Name="Steve" Age="21" Location="USA" />
<local:PersonModel Name="John" Age="37" Location="USA" />
<local:PersonModel Name="Tom" Age="42" Location="UK" />
<local:PersonModel Name="Lucas" Age="29" Location="Germany" />
<local:PersonModel Name="Tariq" Age="39" Location="UK" />
<local:PersonModel Name="Jane" Age="30" Location="USA" />
</x:Array>
</CollectionView.ItemsSource>
</CollectionView>
</ContentPage>
728x90
반응형
그리드형(광고전용)
'C# > MAUI' 카테고리의 다른 글
[C#/MAUI/.NET6] FlexLayout 엘리먼트 : JustifyContent 속성을 사용해 기본 축을 따라 자식 사이 및 주위 공간 배분하기 (0) | 2022.06.26 |
---|---|
[C#/MAUI/.NET6] FlexLayout 엘리먼트 : AlignItems 속성을 사용해 교차 축을 따라 자식 사이 및 주위 공간 배분하기 (0) | 2022.06.26 |
[C#/MAUI/.NET6] FlexLayout 엘리먼트 : Wrap 속성을 사용해 자식을 여러 줄로 배치하기 (0) | 2022.06.26 |
[C#/MAUI/.NET6] Easing 클래스 : 사용자 정의 이징(Easing) 함수 사용하기 (0) | 2022.06.25 |
[C#/MAUI/.NET6] Trigger 엘리먼트 사용하기 (0) | 2022.06.23 |
[C#/MAUI/.NET6] DataTemplate 엘리먼트 : 리소스를 데이터 템플리트 사용하기 (0) | 2022.06.23 |
[C#/MAUI/.NET6] DataTemplate 엘리먼트 : 타입을 갖는 데이터 템플리트 사용하기 (0) | 2022.06.23 |
[C#/MAUI/.NET6] DataTemplate 엘리먼트 : 인라인 데이터 템플리트 사용하기 (0) | 2022.06.23 |
[C#/MAUI/.NET6] RelativeSource 태그 확장 : 바인딩 뷰 모델 참조하기 (0) | 2022.06.23 |
[C#/MAUI/.NET6] ControlTemplate 엘리먼트 : 템플리트에서 뷰 모델 바인딩하기 (0) | 2022.06.23 |
댓글을 달아 주세요