Xaml serializace   zodpovězená otázka

WPF

.NET 4, WPF

Dobrý den,

vytvářím designer pro WPF aplikaci, a zaujala mě možnost serializovat celý window funkcí "XamlWriter.Save(.."

Deserializaci provedu:

var wp = (MainDesigner) XamlReader.Parse(desText);

Serializace i deserializace se provede "Vizuálně" správně, controly jsou tam kde mají být, barvy, rozměry .. OK.

V serializaci se, ale neuloží události controlů.

Př.:

<Button Click="OnBtnClick" Content="Btn" />

se uloží jako

<Button Content="Btn" />

prostě eventy se nezapisují. Věděl by někdo, zdali lze vůbec XamlWriter donutit, aby události serializoval ?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ve WPF sice nedělám, ale i tak mi to připadá jako totální hovadina. Jak by se realizovala serializace napojení metody na událost? To jsou pod kapotou samé low-level věci, které ani serializovat nejde. Ve Windows Forms jsem to kdysi dávno řešil implementací rozhraní IDeserializationCallback na třídu, kterou bylo potřeba serializovat. Při deserializaci se automaticky volá metoda OnDeserialization tohoto rozhraní a v ní jsem právě prováděl napojení metod na události deserializovaného objektu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Taková deserializace se používá ve WPF při načítání každého formuláře. Vnitřně si to event handlery řeší pomocí jmen metod, které se vážou na code behind třídu. Ale nevím o tom, že by tohle šlo používat "k vlastnímu užitku".

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

XamlWriter a XamlReader nepodporují serializaci event handlerů.

Popis limitací a vysvětlení proč: http://msdn.microsoft.com/en-us/library/...

Takže odpověď je, jednoduchým způsobem to není možné.

Možná někde narazíte na funkci Application.LoadComponent - http://msdn.microsoft.com/en-us/library/... - ta události dokáže deserializovat, nepodporuje však z bezpečnostních důvodů načítání přímo ze souborů.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback