Consider the following scenario. I have a model that is defined like the following code
public class LanguageModel
{
public CultureInfo? CultureInfo { get; set; }
public string? LanguageName { get; set; }
public LanguageModel? Parent { get; set; }
public string? Abbreviation { get; set; }
public string? Flag { get; set; }
public bool IsSupported { get; set; } = false;
}
Because I want to group a List
to use in a ListView
in a MAUI
ContentView
, I created this one
public class LanguageModelGroup : List<LanguageModel>
{
public string Name { get; private set; }
public string Flag { get; private set; }
public LanguageModelGroup(string name, string flag,
List<LanguageModel> languages) : base(languages)
{
Name = name;
Flag = flag;
}
}
Then, I have the extension to group a list
public static List<LanguageModelGroup>
ToGroups(this List<LanguageModel> languages)
{
return languages.GroupBy(x => new { x.Parent.LanguageName, x.Parent.Flag })
.OrderBy(x => x.Key.LanguageName)
.Select(x => new LanguageModelGroup(
x.Key.LanguageName,
x.Key.Flag,
x.OrderBy(l => l.LanguageName).ToList()))
.ToList();
}
Based on that, when I click on an item in the ListView
, I want to get the original LanguageModel
. So, I have this code
private void listLanguages_ItemSelected(object sender,
SelectedItemChangedEventArgs e)
{
LanguageModel? languageModel = null;
if(e.SelectedItem is LanguageModel)
languageModel = (LanguageModel)e.SelectedItem;
}
but obviously, the SelectedItem
is a LanguageModelGroup
. How can I get the LanguageModel
from the LanguageModelGroup
?
Update
In the ListView
I can define the following DataTemplate
<ListView.ItemTemplate>
<DataTemplate x:DataType="md:LanguageModel">
and I get the object I expected.
3