Diskuze: WPF Binding image ze zip archivu

C# .NET .NET (C# a Visual Basic) WPF Binding image ze zip archivu American English version English version

Avatar
D0ll0k
Člen
Avatar
D0ll0k:

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. května 11:09
Ten, co se snaží "programovat"
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.