Wpf Quickstart kezdőknek
2013-03-28T13:28:18+01:00
2013-05-10T14:24:55+02:00
2022-07-23T11:36:17+02:00
  • felkerült a dependencyproperty is

    Ez a rész nagyon nehezen jött össze, és most sem vagyok 100% biztos benne, hogy sikerült érthetően átadnom.
    kérek minden kezdőt, akit érdekel, hogy egy levéllel dobjon meg, ha valahol elakadt.

    link
    Mutasd a teljes hozzászólást!
  • bocs, hogy közkézre adtam.


    ezért most miért kérsz bocsánatot?
    Mutasd a teljes hozzászólást!
  • Online video tutorials & training

    vagy

    Pluralsight - Hardcore Developer and IT Training

    Előfordul, hogy a hazai írók is a fenti forrásokból táplálkoznak, bocs, hogy közkézre adtam.

    7, illetve 10 nap ingyen kipróbálható mindkét oldal.
    Mutasd a teljes hozzászólást!
  • Letölthető:Pro WPF 4.5 in C#, 4th Edition
    (Bocsi, ha valakit érdekel)


    Hú, nekem nagyon tetszik! Köszi a linket!
    Mutasd a teljes hozzászólást!
  • Letölthető:Pro WPF 4.5 in C#, 4th Edition
    (Bocsi, ha valakit érdekel)
    Mutasd a teljes hozzászólást!
  • A triggerek használata is olvasható
    link
    Mutasd a teljes hozzászólást!
  • felkerül a wpf stílusok használata is
    link
    Mutasd a teljes hozzászólást!
  • felkerült a hlsl textura kezelés alapja is
    itt található
    Mutasd a teljes hozzászólást!
  • Az új fejezet a Wpf ablak konstruktorának kódból történő meghívását szemlélteti
    itt olvashatod
    Mutasd a teljes hozzászólást!
  • Felkerül a MultiBindig és MultiConvert leírása is
    Link
    Mutasd a teljes hozzászólást!
  • Elindítottam egy HSLS topic-ot is.
    Noha egyenlőre nem sok köze van a kettőnek egymáshoz, a távoli jövőben tervezek írni majd a WPF hlsl lehetőségiről is.

    mindezt itt találod

    ha bárkinek építő jellegű kritikája van, szívesen veszem. Lehetőleg privát üzenetben.
    köszi
    Mutasd a teljes hozzászólást!
  • nem tudtam, hogy van
    a manóba, akkor törlöm az egészet
    Mutasd a teljes hozzászólást!
  • Jó a konverter. Direkt a Boolean -> Visibility-t választottad?
    Erre van beépített konverter: BooleanToVisibilityConverter
    Mutasd a teljes hozzászólást!
  • A tanulni vágyóknak felkerült a Converter leírása is
    Itt olvashatod
    Mutasd a teljes hozzászólást!
  • köszi

    egyenlőre még szenvedek a google editorral, de majdcsak megszokom
    Mutasd a teljes hozzászólást!
  • Nagyon profi, közérthető, hiánypótló összefoglaló kezd kialakulni.
    Mutasd a teljes hozzászólást!
  • a wpf adatellenőrzés(IDataErrorInfo) is felkerült
    link
    Mutasd a teljes hozzászólást!
  • Hopp, ezt nem tudtam. Köszi!
    Mutasd a teljes hozzászólást!

  • SL-ben hivatalosan kell a CanExecuteChanged() event. Ez indítja a kódot, hogy a UI értékelje ki újra a CanExecute-t.
    Mutasd a teljes hozzászólást!
  • Pl. SL alatt egy Button tiltása/engedélyezése abszolút nem követi a CanExecute-ot.
    Mutasd a teljes hozzászólást!
  • Ha ilyen problémád van, akkor a szálbiztosságban lesz valami bibi... Ha GUI threadből megy a módosítás, akkor az engedély/tilt frissül. Dispatcher-dispatcher-dispatcher!, ahogy Lenin elvtárs is megmondta.
    Mutasd a teljes hozzászólást!
  • 1.)
    A locator pattern azért jó, mert könnyűvé tesz a viewmodel-ek közti kommunikációt

    2.) A Command-ing pedig ez esetben! azért rossz, mert mind WPF, mind Silverlight esetén csomószor belefutottam olyan esetbe, amikor a Command CanExecute metódusát nem hívta meg a GUI, s ezért a GUI elemek tiltása és engedélyezése nem frissült.

    WPF alatt még a command manager-t (vagy hogy hívják) rá lehet bírni, hogy frissítse ezeket, de SL alatt nincs ilyen.
    Mutasd a teljes hozzászólást!
  • Az adatkötéshez még nagyon sok minden tartozik, nem csak a konverter.

    Az egész topicot elkezdtem felépíteni itt
    Mutasd a teljes hozzászólást!
  • Én most nem látom, ez miért jobb?

    - Kell hozzá egy külső sdk
    - Az XAML kód több lett (szvsz feleslegesen)
    - Singleton és+ Locator pattern. Ez pont az a kettő, amit ha lehet kerülök.


    Mutasd a teljes hozzászólást!
  • Az adatkötéshez még kapcsolódik a konverter témakör, ugyanis az adat és amihez az adatot kötöm, nem mindig egyező típusúak, a konverter ezt lehet illeszteni egy konverter osztállyal.
    Ezzel elérhetjük, hogy a viewmodel-ben az üzleti logika szerint épüljön fel a kód, s nem a GUI szerint, azaz a kettő szétválasztható!

    Másik fontos téma, hogy a GUI control-ok bár kapnak default kinézetet, de fogjuk fel lookless control-ként őkat, majd kapnak saját stílust és content tempplate-t, azaz ismerkedjünk meg a content model-el is.

    Egy view ne hemzsegjen stílusoktól erőforrásoktól, azokat emeljük ki egy külső resource xaml fájlba.
    Mutasd a teljes hozzászólást!
  • Én nem használok command-ot, mert egy metódus is köthető a gomb click (vagy másik) event-jéhez:


    <Window xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" xmlns:local="clr-namespace:saját app viewmodel-jének namespace-e" <Window.DataContext> <local:MyViewModel x:Name="viewModel"/> </Window.DataContext> <Grid> <Button IsEnabled={Binding CanDoSomething, Mode=OneWay}> <i:Interaction.Triggers> <i:EventTrigger EventName="Click"> <ei:CallMethodAction TargetObject="{Binding}" MethodName="DoSomething"/> </i:EventTrigger> </i:Interaction.Triggers> </Button> </Grid> </Window>

    És a MyViewModel class:

    namespace saját app viewmodel-jének namespace-e { public class MyViewModel : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged(string propertyName) { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } public void DoSomething() { //TODO: itt csinálunk valamit } public CanDoSomething { get { return _canDoSomething; } private set { _canDoSomething = value; OnPropertyChanged("CanDoSomething"); } } } }

    A működéshez pedig az MS Expression Blend WPF SDK-t fel kell telepíteni (ingyens, letöltés itt), majd a telepítése után ezt a két dll-t hozzá kell adni a project referenciához:
    "c:\Program Files (x86)\Microsoft SDKs\Expression\Blend\.NETFramework\v4.0\Libraries\System.Windows.Interactivity.dll" "c:\Program Files (x86)\Microsoft SDKs\Expression\Blend\.NETFramework\v4.0\Libraries\Microsoft.Expression.Interactions.dll"

    Az MVVM-nél pedig a ViewModel-ek eléréséhez, szolgáltatásához érdemes megnézni az MVVMLight-ot innen letöltve.

    A lényege, hogy van egy Singleton patternt megvalósító ViewModelLocator osztályunk, aminek az egyes property-ei a különböző viewmodel-ek, s ezek a property-k köthetők az egyes DataContext-ekhez.
    A ViewModelLocator-t meg fel kell venni a view resource-ába StaticResource-ként. Ezért nem az app resource-ba, mert akkor nem kapunk Blend támogatást hozzá, bár a lefordított program azzal is működne.
    Mutasd a teljes hozzászólást!
  • Egy későbbi hozzászólás szerint, izlés kérdése

    Én arra gondoltam, hogy még a GUI logikai változásait sem szeretem a GUI-ba (XAML) tenni, hanem inkább ezt is a ViewModel-be teszem, ha nem egyszerű működési kérdés.
    [értsd, a VM adatát módosítom és rábízom a bindelésre, hogy a GUI-t megfelelő státuszba hozza - vagyis a változás átvándorol a VM-en is, nem marad meg az XAML-en belül]

    Nálam a trigger inkább csak teljesen megjelenítési kérdés, pl. a terület bizonyos részeinek eltüntetése/megjelenítése vagy látványelem, tipikusan a fókuszba került elem kiemelése.

    De ha pl. fontosnak tartom, hogy a látszik/nem látszik nem csak valamilyen kényelmi lehetőség, hanem valós információ, ami azt is jelenti, hogy ami nem látszik, az egyben "nem választható" opció, akkor ezt inkább bekötöm a VM-be, így az adatellenőrzésekhez kihasználható, vagyis a VM "tudja" mi a látható a felhasználó számára.
    Mutasd a teljes hozzászólást!
  • Nem akarom elvitatni Tőled a trigger szó leírásának elsőbbségét.

    Csak megjegyeztem, hogy ez template-ben lehet datatrigger. Az, hogy közvetlenül "triggereld" a gui-t, én nem tanácsolnám. Ami lehet, az legyen bindingelt wpf alatt. Ha van egy IGuiStatus-od (mondjuk), ami egy IStateMachine-ből valamilyen logika alapján updateli a saját változóit, akkor azt nem kell xaml oldalról triggerrel benyalni, mert széttöri az xaml kódodat és olyan elemeket is el kell nevezned (x:name, x:uid), amikre amúgy semmi szükség, csak hízlalják a listát. Elég a binding, és akkor a GuiStatus model + modelview független lesz a gui megvalósításától. (sztem.)

    (megj.: de ez a hsz most nem annyira a quickstart része a dolognak, inkább izlés/szemlélet, amit nem kötelező követni, nagyon szépen és hibátlanul lehet dolgozni triggerekkel is.)
    Mutasd a teljes hozzászólást!
  • Félek, hogy nem feltétlenül ugyanarról beszélünk: nekem úgy tűnt,
    emelhu
    arra gondolt, hogy a különböző GUI property-k pl. a Visibility értékét bind-olja a model property-jéhez, így változtatgatva azt. A triggerek használata ugye más koncepció (sokszor egyszerűsít).

    De ha mégis, elnézést.

    Nekem azonban úgy tűnik, a trigger szót én írtam le először, holott ez egy fontos koncepciója a WPF-nek.
    Mutasd a teljes hozzászólást!
  • Köszi
    Blogon még sose gondolkoztam.
    Amúgy pont a te hozzászólásod (link) miatt jött az ötlet, hogy jó lenne egy WPF gyorstalpaló
    Mutasd a teljes hozzászólást!
abcd