NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
D0ll0k
Člen
Avatar
D0ll0k:14.5.2016 11:09

Ahojte :). Chci se zeptat, jestli někdo neví, jak ze zip archivu nabindovat image do listboxu. Jediné,co se mi daří je otevřít archiv, uložit obrázek a k němu nějaký komentář.

Třída Predmet:

public string Komentar{ get; private set; }
public string CestaKImage { get; private set; }
public BitmapImage Image { get; set; }

public Predmet(string jmeno, string cesta)
{
        Jmeno = jmeno;
        CestaKImage = cesta;
}

Třída IO, kde nahrávám soubor:

List<Predmet> predmety = new List<Predmet>();

public List<Predmet> NactiPredmety(string soubor)
{
        using (FileStream stream = new FileStream(soubor, FileMode.Open))
        {
                using (ZipArchive zip = new ZipArchive(stream))
                {
                        ZipArchiveEntry info = zip.GetEntry("info.xml");
                        NactiInfo(info.Open());

                        foreach (Predmet predmet in predmety)
                        {
                                ZipArchiveEntry image = zip.GetEntry(predmet.CestaKImage);
                                BitmapImage bmi = new BitmapImage();
                                bmi.BeginInit();
                                bmi.StreamSource = image.Open();
                                bmi.EndInit();
                                predmet.Image = bmi;
                        }
                }
        }

        return predmety;
}

private void NactiInfo(Stream stream)
{
        using (XmlReader reader = XmlReader.Create(stream))
        {
                string jmeno = "";
                string cesta = "";

                while(reader.Read())
                {
                        if (reader.NodeType == XmlNodeType.Element)
                        {
                                if (reader.Name == "predmet")
                                {
                                        jmeno = reader.GetAttribute("jmeno");
                                        cesta = reader.GetAttribute("cesta");
                                }
                        }
                        else if (reader.NodeType == XmlNodeType.EndElement && reader.Name == "predmet")
                                predmety.Add(new Predmet(jmeno, cesta));
                }
        }
}

MainWindow, kde nastavím ItemSource

IO io = new IO();
listBox.ItemsSource = io.NactiPredmety(dialog.FileName);

Xml:

<ListBox x:Name="listBox" ItemsSource="{Binding}" ...>
        <ListBox.ItemTemplate>
                <DataTemplate>
                        <StackPanel>
                                <Image Source="{Binding Image}" Height="50" Width="50"/>
                                <TextBlock Text="{Binding Komentar}"/>
                        </StackPanel>
                </DataTemplate>
        </ListBox.ItemTemplate>
</ListBox>

Zkoušel jsem to nahrávání dát jenom do samostatného Image, ale to taky nefunguje. Občas, když ten soubor nahraji podruhé, obrázek se zobrazí třeba jen na jednom itemu v listboxu, pokud tedy nevyhodí chybu:

An unhandled exception of type 'System.IO.InvalidDataException' occurred in System.IO.Compression.dll

Additional information: Hlavička místního souboru je poškozená.
Odpovědět
14.5.2016 11:09
Veni, vidi, programmato
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 1 zpráv z 1.