Xamarin comment charger une image contorol si l'Url est une image et si la vidéo de la charge de contrôle vidéo

0

La question

Je suis en train d'élaborer Facebook comme des flux de la page où j'ai une liste d'Url ( vidéos et images ). Comment puis-je charger dans le code xaml de l'Interface utilisateur de contrôle spécifiques pour le type d'Url ( image ou vidéo ).

Exemple :

   ```<CollectionView ItemsSource="{Binding UrlList}">
            <Grid>
                If ( url is image)


                <Image Source="{Binding Url}"/>

                If ( url is video )

                <MediaElement Source="{Binding Url}" />
            </Grid>
     </CollectionView>```
controls forms xamarin xamarin.forms
2021-11-12 17:41:00
1

La meilleure réponse

0

Oui, vous pouvez utiliser DataTemplateSelector pour atteindre cet objectif.

Un DataTemplateSelector peut être utilisé pour choisir un DataTemplate au moment de l'exécution basée sur la valeur d'une propriété liée. Cela permet à plusieurs DataTemplates être appliqué pour le même type d'objet, de personnaliser l'apparence des objets.

1.La création d'un DataTemplateSelector

Un modèle de données sélecteur est mis en œuvre par la création d'une classe qui hérite de DataTemplateSelector. L' OnSelectTemplate la méthode est ensuite substituée pour renvoyer un particulier DataTemplate.

Vous pouvez consulter le code suivant:

public class UrlTemplateSelector : DataTemplateSelector
{
    public DataTemplate ImageTemplate { get; set; }

    public DataTemplate VideoTemplate { get; set; }

    public DataTemplate OtherTemplate { get; set; }

    protected override DataTemplate OnSelectTemplate(object item, BindableObject container)
    {
        ItemModel model = (ItemModel)item;

        if (model.Url.EndsWith(".mp4")|| model.Url.EndsWith(".avi")|| model.Url.EndsWith(".rmvb")) // you can add multiple video file suffixes
        {
            return VideoTemplate;

        }
        else if (model.Url.EndsWith(".png")|| model.Url.EndsWith(".bmp") || model.Url.EndsWith(".jpg"))//you can add multiple image file suffixes
        {
            return ImageTemplate;
        }
        else {
            return OtherTemplate;
        }
    }
}

Supposons que ItemModel est l'élément lié.

public class ItemModel
{
    public string Name { get; set; }
    public string Url { get; set; }
}

2. D'utilisation(à supposer que la page est TestPage)

TestPage.xaml

<ContentPage.Resources>
    <ResourceDictionary>
        <DataTemplate x:Key="imageTemplate">
            <ViewCell>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="0.4*" />
                        <ColumnDefinition Width="0.6*" />
                    </Grid.ColumnDefinitions>
                    <Label Text="{Binding Name}" TextColor="Green" FontAttributes="Bold" />
                    <Image Grid.Column="1" Source="{Binding Url}"  />
                </Grid>
            </ViewCell>
        </DataTemplate>
        <DataTemplate x:Key="videoTemplate">
            <ViewCell>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="0.4*" />
                        <ColumnDefinition Width="0.6*" />
                    </Grid.ColumnDefinitions>
                    <Label Text="{Binding Name}" TextColor="Red" FontAttributes="Bold" />
                <behaviors:MediaElement  Grid.Column="1" Source="{Binding Url}"  />
                </Grid>
            </ViewCell>
        </DataTemplate>
    <local:UrlTemplateSelector x:Key="mediaUrlTemplateSelector" ImageTemplate="{StaticResource imageTemplate}" VideoTemplate="{StaticResource videoTemplate}" />
    </ResourceDictionary>
</ContentPage.Resources>
<StackLayout Margin="20">
    <Label Text="ListView with a DataTemplateSelector" FontAttributes="Bold" HorizontalOptions="Center" />
<ListView x:Name="listView" Margin="0,20,0,0" ItemTemplate="{StaticResource mediaUrlTemplateSelector}" />
</StackLayout>

Pour plus de détails, vous pouvez vérifier:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/templates/data-templates/selector.

Et il y a un échantillon inclus dans le document ci-dessus, vous pouvez l'essayer.

2021-11-15 02:42:45

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................