Я не уверен, что это лучшее решение, но я делал это раньше, создав шаблон ячейки представления с привязкой данных и представлением списка.
В вашем ContentPage.cs:
MyListView.ItemsSource = MyObjectCollection;
В вашем ContentPage.xaml свяжите свойства вашего объекта со свойствами viewCell:
<ListView>
<ListView.ItemTemplate>
<DataTemplate>
<MyViewCell x:Name="MyViewCellName">
ImageHeight="{Binding ImageHeight}"
ImageWidth ="{Binding ImageWidth}"
AuthorPicture="{Binding AuthorPicture}"
Author="{Binding Username}"
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Viewcell.cs объявите ваши привязываемые свойства, добавьте методы доступа и создайте ваши компоненты в конструкторе:
public class MyViewCell: ViewCell {
Image MediaImage;
public static readonly BindableProperty ImageHeightProperty = BindableProperty.Create("ImageHeight", typeof(int), typeof(MyViewCell), 300);
public static readonly BindableProperty ImageWidthProperty = BindableProperty.Create("ImageWidth", typeof(int), typeof(MyViewCell), 300);
public int ImageHeight
{
get => (int)GetValue(ImageHeightProperty);
set => SetValue(ImageHeightProperty, value);
}
public int ImageWidth
{
get => (int)GetValue(ImageWidthProperty);
set => SetValue(ImageWidthProperty, value);
}
public MyViewCell() {
MediaImage = new Image
{
HeightRequest = ImageHeight,
WidthRequest = ImageWidth
};
var frame = new Frame {
Content = 'your components in a grid/stack'
}
View = frame;
}
}
Затем вы вносите необходимые изменения при изменении контекста привязки, например, изменение источников изображения, текстового содержимого и т. Д. c:
protected override void OnBindingContextChanged()
{
base.OnBindingContextChanged();
MediaImage.HeightRequest = ImageHeight;
MediaImage.WidthRequest = WidthRequest;
};