Xamarin Forms CollectionView Источник изображения не привязан к пути к файлу. (Предварительная версия Xamarin Forms v 4.0.0.8055-pre1) - PullRequest
0 голосов
/ 07 января 2019

Если у меня есть простое изображение в XAML:

<Image
                                    Source="{Binding ImageUrl}"
                                    Grid.Column="0"
                                    HorizontalOptions="EndAndExpand"
                                    VerticalOptions="CenterAndExpand" />

путь к файлу привязан правильно. Однако, если я вложу элемент Image в CollectionView, изображение больше не будет связываться.

<CollectionView
                x:Name="CV"
                ItemsSource="{Binding ThumbnailPhotos}"
                VerticalOptions="Center"
                HorizontalOptions="Center">
                <CollectionView.ItemsLayout>
                    <GridItemsLayout
                        Orientation="Vertical"
                        Span="2" />
                </CollectionView.ItemsLayout>
                <CollectionView.ItemTemplate>
                    <DataTemplate>
                        <Frame
                            BorderColor="LightGray"
                            CornerRadius="3"
                            HasShadow="False">
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition
                                        Width="Auto" />
                                </Grid.ColumnDefinitions>
                                <Grid.RowDefinitions>
                                    <RowDefinition
                                        Height="Auto" />
                                </Grid.RowDefinitions>
                                <Image
                                    Source="{Binding ImageUrl}"
                                    Grid.Column="0"
                                    HorizontalOptions="EndAndExpand"
                                    VerticalOptions="CenterAndExpand" />
                            </Grid>
                        </Frame>
                    </DataTemplate>
                </CollectionView.ItemTemplate>
            </CollectionView>

Для целей тестирования ObservableCollection в моей ViewModel выглядит так:

 ThumbnailPhotos = new ObservableCollection<Thumbnail>
        {
            new Thumbnail(){ ImageUrl = "/Users/<myUser>/Library/Developer/CoreSimulator/Devices/68BF4E8E-DF6D-4459-B6AD-DCEDB270916B/data/Containers/Data/Application/0C205001-6DFD-4846-9E6D-415F772FCB58/Documents/Defect Photos/IMG_20190102_165617/IMG_20190102_165617.jpg" } ,
            new Thumbnail(){ ImageUrl = "/Users/<myUser>/Library/Developer/CoreSimulator/Devices/68BF4E8E-DF6D-4459-B6AD-DCEDB270916B/data/Containers/Data/Application/0C205001-6DFD-4846-9E6D-415F772FCB58/Documents/Defect Photos/IMG_20190102_165617/IMG_20190102_165617.jpg" } ,
            new Thumbnail(){ ImageUrl = "/Users/<myUser>/Library/Developer/CoreSimulator/Devices/68BF4E8E-DF6D-4459-B6AD-DCEDB270916B/data/Containers/Data/Application/0C205001-6DFD-4846-9E6D-415F772FCB58/Documents/Defect Photos/IMG_20190102_165617/IMG_20190102_165617.jpg" } ,
            new Thumbnail(){ ImageUrl = "/Users/<myUser>/Library/Developer/CoreSimulator/Devices/68BF4E8E-DF6D-4459-B6AD-DCEDB270916B/data/Containers/Data/Application/0C205001-6DFD-4846-9E6D-415F772FCB58/Documents/Defect Photos/IMG_20190102_165617/IMG_20190102_165617.jpg" } ,

        };

1 Ответ

0 голосов
/ 08 января 2019

Ошибка, по-видимому, заключается в том, как создается путь к файлу. В iOS я использовал этот метод:

var docsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
var photosPath = Path.Combine(docsPath, "DefectPhotos/");

        if(Directory.Exists(photosPath))
        {
            string[] photoNames = GetFileNames(photosPath, "*.jpg");

            foreach (var photoName in photoNames)
            {
                if (photoName.Contains(_item.DefectId))
                {
                    thumbnailPhotos.Add(new Thumbnail() { ImageUrl = photosPath + photoName });
                }
            }
        }

Критическим моментом является способ получения пути к документам. Я проверял путь к изображению, используя «get info» для photoName, которое пытался загрузить. Этот путь к файлу не работал.

...