XAML.cz Magazín moderních technologií založených na XAML

x:FieldModifier a x:Name

Napsáno pro WPF od Jarda Jirava  [01.11.2011]

Určitě jste se s tím již také setkali. Potřebujete rychle kolegovi ukázat jak udělat nějakou věc ve WPF nebo v Silverlightu a vůbec se vám nechce zaobírat se nějakými návrhovými vzory, které jsou v obou zobrazovacích technologiích použitelné. Na chvíli tak zapomenete na nějaké MVVM a jednoduše chcete naprototypovat kus xaml kódu.

Jenže ouha, za chvilku zjistíte, že se potřebujete odkázat na nějaký prvek z CodeBehind a ještě o chvilku později, že by nebylo vůbec špatné, kdyby bylo možné se nějakým způsobem dostat na ten prvek ještě odjinud, než jen z CodeBehind souboru.

Možná si v té chvíli vzpomenete, že vlastně XAML kód je ve výsledku jen kód, část partial třídy, kterou rozvíjíte dále v CodeBehind souboru a tak by měl pro jednotlivé deklarované prvky existovat zápis, který nám je jednak zpřístupní v této třídě a odanonymizuje je a také bychom měli být schopni jim nastavit viditelnost v rámci dané třídy. A právě za tímto účelem existuje v xaml namespace http://schemas.microsoft.com/winfx/2006/xaml, který má většinou prefix x: a obsahuje ty nejzákladnější věci, se kterými se můžete v každém xaml souboru setkat.

x:FieldModifier

je právě jedním z nich a určuje nám viditelnost daného prvku (elementu). Ve výchozím stavu, tedy pokud jej neuvedete, je takový prvek viditelný jen na úrovni dané třídy - private, kterou deklarace rozšiřuje. Pokud tento atribut použijete, máte pak možnost nastavit prvku viditelnost public, případně ještě internal

x:Name

je pak dalším atributem a řekl bych, že asi nejčastěji používaným. Označuje a identifikuje nám daný element a dává mu jednoznačné jméno v dané třídě, nebo pro daný template. Pro pojmenování můžete využít ještě druhého atributu a to bez uvedení prefixu x:, tedy jen Name, který vede na stejnou funkcionalitu. Snad jediný rozdíl je v tom, že atributy z výše uvedenéeho namespace jsou zpracovávány dříve a tak dojde k včasnější identifikaci daného prvku v objektovém stromu.

Pro pojmenovávání prvků pak můžete využít jednoduchého pravidla. Pojmenujte prvek skutečně až v okamžiku, kdy je toto třeba a není jiného zbytí. I pro ono zmíněné prototypování nemusíte pojmenovat všechny prvky, pojmenování se bude asi nejčastěji týkat vstupních prvků, ze kterých si budeme chtít převzít, případně nastavit jim hodnoty právě z CodeBehind souboru.

A samozřejmě, v okamžiku, kdy využijeme Bindingu, tak budeme pojmenovávat ještě méně, i když tady bude hodně záležet na použitém MVVM frameworku. Kdy třeba u Caliburn.Micro je pojmenování jedním ze způsobů, jak zajistit bindování a to nejen na data (vlastnosti), ale také na metody.

Do zmíněného namespace pak nepatří jen tyto dva atributy, ale ještě další, které si představíme třeba někdy příště.

Komentáře

ukládám komentář, vyčkejte prosím..
  1. Buďte první, kdo napíše komentář.

@xamlcz

  • RT @jvanrhyn: XAML, It's a bit like olives. Takes a while to get used to. But once you're used to it. It is actually pretty good. <3 XAML
  • RT @moser_christian: WPF Inspector 0.9.7 is released. It supports .NET 3.5 and 4.0 The project is now open source and available on CodeP ...
  • Jeff Handley oznámil vydání WCF RIA Services v.1.0 SP1 RTM http://bit.ly/gOgckn ke stažení na http://bit.ly/gVAXdK
  • jedna výzva pro Brno. Byl někdo z vás na přednášce o RIA v MS Akvárku? Dejte o sobě vědět. Děkuji
  • také jste uvažovali o tom, že zkusíte na projekt použít Caliburn Micro nebo naopak Prism 4? A co tak obojí, šlo by to nebo ne? Již brzy