2017-12-26 10 views
0

Ich habe ein Problem in meiner Xamarin.Forms-Anwendung in MVVM. Ich habe eine ListView und möchte ein Bild in ItemTemplate anzeigen. Zu tun, dass ich eine ImageRessource Klasse erstellt haben:ListView Xamarin.forms laden Bild dynamisch von ItemSource mit ImageResource

[ContentProperty("Source")] 
public class ImageResourceExtension : IMarkupExtension 
{ 
    public string Source { get; set; } 

    public object ProvideValue(IServiceProvider serviceProvider) 
    { 
     if (Source == null) 
     { 
      return null; 
     } 

     var imageSource = ImageSource.FromResource($"CoPro.Assets.{Source}"); 

     return imageSource; 
    } 
} 

Hier ist die XAML meiner Listview:

<ListView ItemsSource="{Binding Series}"> 
       <ListView.ItemTemplate> 
        <DataTemplate> 
         <ViewCell> 
          <Grid> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="20"/> 
            <ColumnDefinition Width="*"/> 
           </Grid.ColumnDefinitions> 
           <StackLayout Orientation="Horizontal"> 
            <Image Source="{images:ImageResource image.jpg}"/> 
           </StackLayout> 
           <Label Grid.Column="1" Text="{Binding Name}" Style="{StaticResource UsualLabelTemplate}" /> 
          </Grid> 
         </ViewCell> 
        </DataTemplate> 
       </ListView.ItemTemplate> 
      </ListView> 

Außerdem habe ich auf "Bilder" von diesem Namensraum: xmlns: Bilder = "clr -namespace: CoPro.Assets "

So zeigt mein ListView für jedes" Series "Item das gleiche Bild. Für jedes Element gibt es eine Zeichenfolgeneigenschaft mit dem Pfad des Bildes. Wie kann ich bitte ein Bild von jedem Artikel zeigen?

Vielen Dank im Voraus für Ihre Hilfe.

+0

Warum DateiImageSource nicht direkt verwenden? –

Antwort

0

Ich habe gerade die Lösung gefunden. Ich musste Source-Eigenschaft von Image-Tag verwenden:

<ListView Grid.Row="1" x:Name="MainListView" ItemsSource="{Binding Series}"> 
        <ListView.ItemTemplate> 
         <DataTemplate> 
          <ViewCell> 
           <ViewCell.View> 
            <Grid> 
             <Grid.ColumnDefinitions> 
              <ColumnDefinition Width="60"/> 
              <ColumnDefinition Width="*"/> 
             </Grid.ColumnDefinitions>           
             <Image Source="{Binding ImageUrl, Converter={StaticResource StringToImageSourceConverter}}" 
               Aspect="AspectFill" 
               /> 
             <Label Grid.Column="1" Text="{Binding Name}" Style="{StaticResource UsualLabelTemplate}" /> 
            </Grid> 
           </ViewCell.View> 
          </ViewCell> 
         </DataTemplate> 
        </ListView.ItemTemplate> 
       </ListView> 

Die Lösung bestand darin, einen Konverter zu verwenden, und Source-Eigenschaft enthielt eine Zeichenfolge. Dieser String wird in den Parameter in meinem Konverter wie folgt gesendet:.

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value != null) 
     { 
      return ImageSource.FromResource($"CoPro.Assets.{value}"); 
     } 
     else 
     { 
      return null; 
     } 
    } 

in diesem Code "$" CoPro.Assets“der Weg ist, wo mein Bild Datei ist

Danke für Ihre Hilfe

Verwandte Themen