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

Така че създадох приложение за Windows Store (известно още като Windows 8 Application / по-рано наричано 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)


Можете да използвате само directory/filename.ext в Image Source, ако са извлечени изображения, поддиректория. Свържете две стойности и задайте на PathCover Property:

 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