• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    TENCOKACISTROMYProgramovani v C#, F# a dalsich jazycich pro .NET, Mono a ostatni CLI implementace
    SLUPKA
    SLUPKA --- ---
    AREX: Něco takového by nefungovalo? (SetTime neexistuje, ale není těžké to přepsat, aby to dělalo to co má :))

    var curDate = DateTime.Now;

    if(CheckDays.Contains(curDate.DayOfWeek))
    {
      if(curDate.Hour == CheckHour)
      {
        DoSomething();
      }
      if(curDate.Hour >= CheckHour)
      {
        curDate = curDate.AddDays(1);
      }
    }

    while(true)
    {
      if(CheckDays.Contains(curDate.DayOfWeek))
        break;

      curDate = curDate.AddDays(1);
    }

    return curDate.SetTime(CheckHour, 0, 0);
    AREX
    AREX --- ---
    Potreboval bych mensi vypomoc. Asi na to jdu zbytecne slozite a nejak se v tom zapomotavam a vznikaj mi hrozne slozity podminky.

    Mam tyto dva parametry.

    private const int CheckHour = 7;
    private DayOfWeek[] CheckDays = new[] { DayOfWeek.Monday, DayOfWeek.Wednesday, DayOfWeek.Friday };

    Zacnu nekolika priklady
    Pondeli 7:37 - metoda neco udela a vrati Streda 7:00
    Pondeli 8:28 - metoda nic nedela a vrati Streda 7:00
    Streda 17:42 - metoda nic nedela a vrati Patek 7:00
    Patek 7:21 - metoda neco udela a vrati Pondeli 7:00
    Sobota 5:55 - metoda nic nedela vrati Pondeli 7:00

    Je to tedy v podstate takovy mensi task scheduler, akorat v podstate sity na miru. Ta metoda se muze spustit prakticky kdykoliv, proto potrebuju v prvnim kroku overit jestli vubec ma neco spoustet. Nasledne se pak spocita datum pro dalsi teoreticke spusteni.
    BAT
    BAT --- ---
    SLUPKA: Diky moc.
    Ale skoda, po precteni vidim, ze to bez dalsich obezlicek nejde, cimz padem to pro me ztraci tu eleganci a bude efektivnejsi se v tomto pripade na XAML uplne vykvajznout.
    SLUPKA
    SLUPKA --- ---
    BAT: To už tak úplně přímočaře nejde, ale řešení najdeš třeba tu: http://karlhulme.wordpress.com/2007/02/14/xpath-variabledynamic-parameters-in-wpf-binding/
    BAT
    BAT --- ---
    SLUPKA: Muzes mi to nejak podrobnejc popsat?
    To co bych chtel, je vlastne Binding uvnitr Bindingu - asi neco jako kdybych udelal:
    {Binding XPath=//Items/Item[@id='{Binding Source={x:Static local:Settings.Instance}, Path=ItemId}']}
    Takhle to samozrejme nejde, to jen pro lepsi vysvetleni co presne chci.
    SLUPKA
    SLUPKA --- ---
    BAT: Dá se bindovat na XPath cestu do toho xml, pak už ti stačí, aby si uměl XPath :)
    BAT
    BAT --- ---
    Je mozny podle hodnoty nabindovane property vybrat urcity element z XML
    a z tohoto elementu pak pouzit nejake parametry napr. k nastaveni zobrazeneho textu, obrazku, atp?

    Priklad:

    <?xml version="1.0" encoding="utf-8" ?>
    <Items xmlns="">
    <Item tag="0" icon="icon1.png" txt="Text 1">
    <Item tag="1" icon="icon2.png" txt="Text 2">
    <Item tag="2" icon="icon3.png" txt="Text 3">
    </Items>

    Vedle toho mam property cisloIkony.
    A pak toto:

    <Image Source="{Binding ...}" />
    <TextBlock Text="{Binding ...}" />

    Jak zaridit Binding, aby se z XML vybralo Item jehoz @tag odpovida aktualni hodnote cisloIkony,
    a z te vybrane polozky pouzit @icon a @txt pro nastaveni Image.Source a TextBlock.Text ?
    Googlim, MSDN procitam, ale ne a ne se dobrat reseni - da se to vubec udelat?
    BAT
    BAT --- ---
    MORMEGIL: muzu prepinat "Show output from" mezi Build, nebo Debug - oboji samozrejme vypisuje jine veci, ale nikde neni nic o spatnem bindovani.
    Mozna to vyplyva z nejakych omezeni Express edice.
    MORMEGIL
    MORMEGIL --- ---
    BAT: Tak v Output window jde přepínat, čeho Output se má zobrazit… (Blbá rada, ale co když…)
    BAT
    BAT --- ---
    SLUPKA: Clovece tuhle radu uz jsem kdesi cetl, ale v mem pripade to zkratka neplati.
    S bindovanim jsem se za tu kratkou dobu uz neco napatlal a nasekal a vyresil hromadu chyb,
    ale NIKDY jsem v output okne nemel zadnou zpravu jakkoliv se tykajici bindovani.
    Ani v Errorlistu, ani v Output window.

    (zacinam si myslet, ze je tam nekde jeste jine "Output" window o kterem nevim :)
    SLUPKA
    SLUPKA --- ---
    BAT: Jinak takové doporučení, když se ti něco nezdá kolem bindování, tak se podívej do Output window ve visual studiu. Když nesedí binding, tak se to tam napíše a občas je tam i hint co by mohlo být za problém (například, tady by ti to psalo, že property Server not found :))
    BAT
    BAT --- ---
    Diky obema za vysvetleni.
    Prepsal jsem to tak, aby instance Server byla property, a uz to funguje.
    NECROMAN
    NECROMAN --- ---
    SLUPKA: tak jsem to myslel, dik
    BAT
    BAT --- ---
    SLUPKA: Aha, asi jsem nepochopil proces fungovani bindovani.

    Jestli to chapu spravne, tak v te "ceste" definujici vazbu smi byt pouze properties?
    Tzn. Address, na kterou chci bindovat, sice je property (Server.Address je property),
    ale nepujde to kvuli tomu, ze jeji parent (Server) neni property (Settings.Instance.Server je field).

    Myslel jsem, ze je dulezity jen to, aby byl property cilovy element na ktery binduju, ale ze uz nezalezi pres co vsechno se k nemu dostavam.
    SLUPKA
    SLUPKA --- ---
    BAT: Skutečná properta znamená property, nikoliv field.

    Field vypadá např. takto:
    public int i;

    Property např. takto:
    public int I { get; set; }

    A na bindování musíš bindovat na property nikoliv na fieldy
    BAT
    BAT --- ---
    NECROMAN: o vyvolani udalosti PropertyChanged je postarano.
    V setteru hodnoty Address se ta udalost vyvolava. Cely kod jsem sem nedaval aby to nebylo zbytecne dlouhy
    (a taky proto, ze nevim jak to sem pastnout bez nutnosti to cele jeste rucne formatovat a menit ruzne znaky na htmlentity, atp.).

    Co myslis tim "skutecna Properta" ?
    Jaky je v tomto ohledu (pouziti pri bindovani) rozdil mezi class Trida { public int cislo = 10; } a mezi class Trida { public Cislo Trida2 = new Cislo(); Trida2.cislo = 10; } ?

    Zeptam se jinak:
    Je problem ve zpusobu zapisu te vazbu v XAML?
    Tzn. je spatne {x:Static local:Settings.Instance}, Path=Server.Address} ?
    On uz se neumi dostat na .Address, pac tak daleko chodit neumi, nebo se to musi napsat jinak?

    (jestli se ptam nejak hloupe, tak se omlouvam, a prosim o trpelivost.)
    NECROMAN
    NECROMAN --- ---
    BAT: ono to jde, ale kazda z tech propert musi byt skutecna Properta, takze v pripade promenne
    public ServerSettings Server = new ServerSettings();
    to nepujde
    A stejne tak pokud to ma reagovat na zmenu, tak je nutne na kazdem clanku toho volani volat PropertyChanged
    BAT
    BAT --- ---
    Da se v XAML nabindovat jako zdroj parametr nejake tridy, kterazto je pristupna zase jako parametr jine tridy?
    ...asi se nevyjadruju moc jasne - priklad:
        public class ServerSettings : INotifyPropertyChanged {
            public string Address;
        }
    
        public sealed class Settings {
            public ServerSettings Server = new ServerSettings();
        }
    
    ...no a ja tedka chci nabindovat zdroj Settings.Instance.Server.Address.
    Zkousel jsem to bez uspechu vselijak, napr. takhle:
        <TextBlock Text="{Binding Source={x:Static local:Settings.Instance}, Path=Server.Address}" />
    Nicmene at se s hodnotou Address deje cokoliv, textblock je stale prazdny.
    Pokud to nabinduju pres ObjectDataProvider ktery vola metodu vracejici hodnotu Settings.Instance.Server.Address, tak to funguje.

    Mam blbe specifikovanou tu vazbu?
    ...napr. kdyz jsem jen Path=Server.Address nahradil volanim metody Path=VratAdresu, tak to funguje, takze asi je potreba to zapsat nejak jinak.

    (btw. nechce se mi jit cestou desitek ODP, technicky vzato je to asi totez, ale radsi bych tech 20+ radek kodu nenapsal).
    Znate prosim reseni?
    MORMEGIL
    MORMEGIL --- ---
    NECROMAN: E? To jsou dvě různé věci vždycky, String.Format používá composite format string, tzn. „{0:format}“, Int64.ToString() používá jen ten formát. Ale:
    x.ToString("D4");
    String.Format("{0:D4}", x);
    je snad totéž, ne?
    NECROMAN
    NECROMAN --- ---
    hmm, koukam, ze kdyz mam cislo long l, tak toto jsou 2 ruzne veci:
    l.ToString(format) a string.Format(format, l)
    BAT
    BAT --- ---
    Prosim vas pomozte mi nekdo, jsem z toho na mrtvici:

    MS Visual C# 2010 Express
    TreeView ma nabindovanou ObservableCollection a pouziva DataTemplate.
    Jak se dostanu na jednotlive TreeViewItems?
    Samozrejme jednotlivy polozky muzu snadno priadavat/menit/mazat provadenim pozadovanych uprav na patricne kolekci, ale napr...
    ...jak oznacim urcitou polozku? (TreeView.Items[3].IsSelected=true)
    ...jak sbalim urcitou vetev stromu?

    Asi by to slo pres pridane parametry "selected" a "expanded" v kolekci, ktere bych taky nabindoval na jejich ekvivalenty v ItemContainerStyle, ale proboha nejde tohle delat nejak normalne???
    Uz se s tim potykam celej den, Google uz ze mne musi bejt taky na nervy.

    Prece nejni mozny, ze clovek musi vytvaret takovy strasny konstrukce, jen aby dosahl tak jednoduchych a beznych veci?
    Co mi unika?
    Kliknutím sem můžete změnit nastavení reklam