x:FieldModifier a x:Name
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