Отображение изображения из Uri в Winrt и шаблоне MVVM

Поэтому я создал приложение для Магазина Windows (также известное как Приложение для Windows 8 / ранее называвшееся Metro App) и импортировал zip-архив, содержащий изображение (импорт работает хорошо).

Когда zip извлекается (в его собственной папке), я добавляю объект, который представляет папку в ObservableCollection.

Этот ObservableCollection используется как DataContext для GridView, имя папки отображается правильно, но первое изображение папки не... ‹= так что моя проблема.

Я создаю свой объект с помощью статического метода после завершения извлечения

public class ZipFolder
    {

        public string Title
        {
            get { return _title; }
            set { _title = value;}
        }
        public int CurrentPage
        {
            get { return _currentPage; }
            set { _currentPage = value;}
        }
        public Uri PathCover
        {
            get { return _pathCover;  }
            set { _pathCover = value;}
        }

        private string _title ;
        private int _currentPage;
        private Uri _pathCover;

    }
public static async Task<ZipFolderObject> CreateComic(StorageFolder folder)
{
    ZipFolderObject o = new ZipFolderObject();
    o.Title = folder.DisplayName;

    IReadOnlyList<StorageFile> asyncOperation = await folder.GetFilesAsync();
    StorageFile cover = asyncOperation[0];

    o.PathCover = new Uri("ms-appdata:///local/" + folder.Name + "/" + cover.Name);

    return o;
}

А привязка выглядит так:

<DataTemplate x:Key="zipFolderItemTemplate">
        <StackPanel Width="165" Height="250">
            <Grid Height="215">
                <Border Background="Bisque" Width="{Binding ActualWidth, ElementName=image}">
                    <!--<Image x:Name="image" VerticalAlignment="Top" HorizontalAlignment="Center" Source="{Binding Cover}" />-->
                    <Image Stretch="Uniform" x:Name="image" VerticalAlignment="Top" HorizontalAlignment="Center">
                        <Image.Source>
                            <BitmapImage   UriSource="{Binding PathCover}" />
                        </Image.Source>
                    </Image>
                </Border>
                <Polygon Points="0,0 0,50, 50,0" Stroke="Red" FillRed" RenderTransformOrigin="0.5,0.5" Visibility="{Binding CurrentPage, Converter={StaticResource BookmarkVisibilityConverter}}" Width="{Binding ActualWidth, ElementName=image}" />
            </Grid>
            <TextBlock HorizontalAlignment="Center" TextWrapping="Wrap" VerticalAlignment="Top" Text="{Binding Title}" Margin="0,10,0,0" Foreground="Black" />
        </StackPanel>
    </DataTemplate>

Так что, если у кого-то есть намек на мою проблему, это будет здорово!


person fantastik78    schedule 12.12.2012    source источник
comment
Я продолжаю свое исследование и привязываю непосредственно к источнику изображения свойство объекта ZipFolder типа BitmapImage. Это работает, но я думаю, что это может быть слишком много производительности, и я предпочитаю первый способ...   -  person fantastik78    schedule 12.12.2012


Ответы (2)


Вы можете использовать только каталог/filename.ext в источнике изображения, если извлеченные изображения, подкаталог. Соедините два значения и установите свойство PathCover:

 folder.Name + "/" + cover.Name

И отредактируйте Data Templete в этом разделе:

<Image Stretch="Uniform" x:Name="image" VerticalAlignment="Top" HorizontalAlignment="Center" Source={Binding PathCover}/>  

С уважением.

person The Goat    schedule 12.12.2012

Просто используйте String вместо Uri.

в mainpage.xaml

 <Image Source="{Binding VehicleIcon}" Height="54" Width="54"/>

в файле viewmodel.cs

public String VehicleIcon {get;set; }
...
VehicleIcon = "ms-appx:///Assets/logo.png";
person Rocket    schedule 13.08.2013