Я не могу получить доступ к x: Имя элементов управления в ListView в XAML и код позади - PullRequest
0 голосов
/ 29 марта 2019

У меня есть ListView в формах Xamarin, в котором есть пользовательская ячейка.Пользовательская ячейка содержит элемент управления Image с атрибутом ax: Name.Теперь я попытался привязать индикатор активности IsRunning Property к свойству Image IsLoading, и формы Xamarin не смогли найти изображение, используя x: Name.Я тоже пытался получить доступ из бэкэнда, тоже самое.

Я добавил другие элементы в Listview, и их x: Name тоже не были видны.

Примечание: я могу получить доступ к x: Имя элементов управления, которые я поместил вне ListView, так что это похоже на проблему со списком.

<StackLayout>
    <ActivityIndicator x:Name="activity" Color="Purple" HeightRequest="50" WidthRequest="50" IsRunning="{Binding Source={x:Reference Offerimg},Path=IsLoading}"></ActivityIndicator>


    <ListView x:Name="OfferLV" HasUnevenRows="True" x:FieldModifier="Public" SeparatorVisibility="None" BackgroundColor="White">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell >
                    <StackLayout Padding="0,10,0,10">
                        <Image  x:Name="offerimg" HeightRequest="500" WidthRequest="100" Aspect="AspectFill"></Image>
                    </StackLayout>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</StackLayout>

Ответы [ 2 ]

1 голос
/ 02 апреля 2019

Существует очень хорошая библиотека FFImageLoading , которая поможет вам делать то, что вы хотите, и имеет встроенное свойство IsLoading для отображения ActivityIndicator соответственно. Вы также можете обрабатывать ошибки загрузки и так ...

<ListView VerticalOptions="StartAndExpand" ItemsSource="{Binding Items}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Grid>
                            <ff:CachedImage x:Name="Image" Source="https://www.allibert-trekking.com/uploads/media/images/thumbnails/AMin3_10-photo-montagne-chine-lac.jpeg?v2" />
                            <ActivityIndicator Color="OrangeRed" IsRunning="{Binding IsLoading}" IsVisible="{Binding IsLoading}" BindingContext="{x:Reference Name=Image}" />
                        </Grid>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

Я создал образец для этого примера здесь: https://github.com/vincentcastagna/ImageLoadingPlaceHolder

0 голосов
/ 29 марта 2019

Ожидается, что все будет работать в технологиях XAML, включая Xamarin.Forms.

Не существует только одного ViewCell, но их может быть тысячи, и вы не можете получить доступ к тысячам различных элементов.с одним именем.

Рекомендуется использовать привязку данных.Часто вы также можете получить доступ к этим предметам, разыгрывая sender в событиях.

...