Вы можете решить эту проблему несколькими способами:
- Вы можете создать ValueConverter, который преобразует ваш Id или Name в CategoryDetail в путь к изображению и привязывает его к свойству
Image
. - Добавить изображение как свойство в CategoryDetail и напрямую связать
Для подхода ValueConveter вам необходимо реализовать интерфейс IValueConveter
, он может выглядеть примерно так:
public class CategoryImageValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var name = (string)value;
switch (name)
{
case "Entradas":
return "entradas.png";
case "Carnes":
return "carnes.png";
case "Peixes":
return "peixes.png";
// add more here
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Затем вам нужно указать Xamarin.Forms, где искать этот ValueConverter.Итак, на странице добавьте:
<ContentPage.Resources>
<ResourceDictionary>
<local:CategoryImageValueConverter x:Key="categoryImage" />
</ResourceDictionary>
</ContentPage.Resources>
Теперь вы можете изменить привязку для свойства Image
на:
Image="{Binding Name, Converter{StaticResource categoryImage}}"
Что касается другого решения, где вы помещаете его непосредственно вКласс CategoryDetail, вы просто создаете новое свойство и заполняете эти элементы правильным именем изображения и связываете это свойство.Для примера давайте назовем его ImageName
:
Image="{Binding ImageName}"
И это будет выглядеть примерно так в CategoryDetail:
private string _imageName;
public string ImageName
{
get => _imageName;
set
{
_imageName = value;
}
}
Если ваш класс CategoryDetail реализует INotifyPropertyChanged, не забудьте запустить событие PropertyChangedтакже, если вы установите имена изображений позже.