IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – 6. diel - Programujeme pre Windows 8 - Práca so súbormi

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Avatar
fidko.tomas
Člen
Avatar
fidko.tomas:1.7.2013 13:40

Pekny clanok :) Planujes pridat aj clanok k vytvaraniu Flyoutov ?

 
Odpovedať
1.7.2013 13:40
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovedá na fidko.tomas
Petr Nymsa:1.7.2013 14:32

Flyouty někdy také určitě proberu :). Ale použiju je přes externí knihovnu Callisto kterou používají všichni (včetně dem z Microsoftu). Jinak v nejbližší době je v plánu hlavně DataBinding, model MVVM a vlastní komponenty

Editované 1.7.2013 14:32
Odpovedať
1.7.2013 14:32
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
fidko.tomas
Člen
Avatar
Odpovedá na Petr Nymsa
fidko.tomas:1.7.2013 15:11

Skvele, na tu kniznicu sa urcite pozriem, vdaka za typ :)

Na MVVM sa tesim. Ak mozem ... Stretol som sa v knihe s modelom MVVC, co je podla mna vlastne MVVM, ale nie som si isty ... je tam nejaky rozdiel ?

 
Odpovedať
1.7.2013 15:11
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovedá na fidko.tomas
Petr Nymsa:1.7.2013 16:03

No s modely z rodiny MVC nemám zas tkaové zkušenosti. Každopádně MVVM -> Model-View-ViewModel je vlastně to že ViewModel je jakýsi prostředník mezi Modelem a View. O MVVC jsem neslyšel a myslím že to je prsotě zas další výmysl :)

Snad nebude vadit když odkážu na velmi pěkně sepsaný články o MVC http://www.zdrojak.cz/…zrodiny-mvc/

Odpovedať
1.7.2013 16:03
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
fidko.tomas
Člen
Avatar
fidko.tomas:1.7.2013 17:35

MVC ako pattern poznam, ale kvoli W8 som si zohnal knizku kde sa spomina prave MVVC pattern, ktory ale vyzera rovnako ako MVVM. Okrem toho mi ani google nedokaze presne zodpoved co to MVVC je, takze asi pojde o nejaky preklep, alebo archaicky nazov, tazko povedat. V kazdom pripade este raz dakujem za clanok a tesim sa na dalsi :)

 
Odpovedať
1.7.2013 17:35
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovedá na fidko.tomas
Petr Nymsa:1.7.2013 17:44

Jak jsem říkal a jak to píšou na tom webu. Strašně moc zdrojů (lidí) píše různé verze MVC a při tom se jedná vlastně o tu samou verzi. Microsoft na svých Hands on Lab vždy uvadí MVVM. Navíc i MVC jako takové není striktně dané. Každý si to dělá mírně po svém, což je trochu kámen úrazu.

Odpovedať
1.7.2013 17:44
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
KopRus
Nevyplnené
Avatar
KopRus:26.1.2014 12:06

Já už nevím, jestli jsem takové ucho, nebo co, ale když se snažím zavolat tu metodu Uloz (v XML serializaci), tak mi to vyhodí tohle: "Protože toto volání není očekáváno, pokračování aktuální metody pokračuje před dokončením volání. Zvažte použití operátoru "await" na výsledek volání." Když tam dám await, tak mi to napíše toto: "Chyba 1 Operátor await lze použít pouze v asynchronní metodě. Zvažte označení této metody pomocí modifikátoru async a změnu jejího návratového typu na Task."... Máme tam vytvořenou kolekci pomocí této třídy:

public SpravceAutomobil()
        {
                Automobily = new ObservableCollection<Automobil>();
        }

Takže jsem si tu metodu Uloz upravil:

public async Task<bool> Uloz()
        {
            try
            {
                StringWriter w = new StringWriter();
                //Načteme složku
                StorageFolder folder = ApplicationData.Current.RoamingFolder;
                //Vytvoříme soubor a v případě existence přemažeme
                StorageFile file = await folder.CreateFileAsync("auta.xml", CreationCollisionOption.ReplaceExisting);
                //Založíme Serializer typu List<User>
                XmlSerializer srl = new XmlSerializer(Automobily.GetType());

                //serializujeme
                srl.Serialize(w, Automobily);

                //zapíšeme přes FileIO
                await FileIO.WriteTextAsync(file, w.ToString());
                // zavřeme StreamWriter
                await w.FlushAsync();

                return true;
            }
            catch
            {
                return false;
            }
 
Odpovedať
26.1.2014 12:06
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovedá na
Petr Nymsa:26.1.2014 12:22

Metodu ve které voláš Uloz označ jako async a ulož metodu zavolej s await. Tím docílíš oddělení nového vlákna a "čekáš" na dokončení uložení. Také lze pustit tuto metodu přes třídu Task.Run

Odpovedať
26.1.2014 12:22
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
KopRus
Nevyplnené
Avatar
KopRus:26.1.2014 15:18

Musím to dělat špatně, protože se mi nevytvořil xml soubor... zkouším to takhle: Třída

public class User
{
    private User users;
    public string Name { get; set; }
    public int Age { get; set; }

    public User()
    {

    }

    public User(string name, int age)
    {
        this.Name = name;
        this.Age = age;

    }



    public async Task<bool> Uloz()
    {
        try
        {
            StringWriter w = new StringWriter();
            //Načteme složku
            StorageFolder folder = ApplicationData.Current.RoamingFolder;
            //Vytvoříme soubor a v případě existence přemažeme
            StorageFile file = await folder.CreateFileAsync("notes.xml", CreationCollisionOption.ReplaceExisting);
            //Založíme Serializer typu List<User>
            XmlSerializer srl = new XmlSerializer(typeof(List<User>));

            //serializujeme
            srl.Serialize(w, users);

            //zapíšeme přes FileIO
            await FileIO.WriteTextAsync(file, w.ToString());
            // zavřeme StreamWriter
            await w.FlushAsync();

            return true;
        }
        catch
        {
            return false;
        }
    }
}

Hlavní stránka:

public MainPage()
{
    this.InitializeComponent();


}

private async void Uloz_Click(object sender, RoutedEventArgs e)
{
    User users = new User("Pepa",18);
    bool result = await users.Uloz();
}
 
Odpovedať
26.1.2014 15:18
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovedá na
Petr Nymsa:26.1.2014 17:15

Snažíš se serializovat List<User> ale serialuzuješ pouze jeden objekt. Nevím proč v Mainpage máš jednoho Usera ale pojmenuješ to Users. Následně proč ve třídě User máš privátní instanci třídy User. Udělej si nějaký UserManager, který bude mít List<User> a v tomto manageru si vytvoř metodu pro uložení

Odpovedať
26.1.2014 17:15
Pokrok nezastavíš, neusni a jdi s ním vpřed
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!