Xaml serialização e estruturas imutáveis?
-
22-07-2019 - |
Pergunta
Como posso fazer isso?
Tentei usar um TypeConverter, mas a única coisa que eu conseguia pensar era para construir o XML para os tipos, que não corta completamente. TypeConverters em serialização xaml vai escapar xml e tratá-lo como texto simples. conversores de valor não são muito melhores.
Agora, eu estou indo para ISupportInitialize e vai jogar se forem feitas alterações após a inicialização, mas eu teria gostado da rota imutável ...
Exemplo de um tipo Desejo serialize:
public struct Foo
{
public string Bar {get;private set;}
public Foo(string bar) : this()
{
Bar = bar;
}
}
eo código
var foo = new Foo("lol");
var serializedFoo = XamlWriter.Save(foo);
Solução
Desculpe, você não pode usar a serialização normal com objetos imutáveis ??em XAML de 2006.
Com XAML de 2009, que suporta construtores e métodos de fábrica, você deve ser capaz de acomplish seu objetivo. Está avisado, WPF 4 não será usando XAML 2009.
Outras dicas
Doh! Eu descaracterizou completamente esta pergunta ...
=================================
Tente usar uma extensão de marcação para criar sua estrutura imutável:
public class FooExtension : MarkupExtension
{
public string Bar {get; set;}
public ImgPathExtension(string bar)
{
this.Bar = bar;
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
var foo = new Foo(this.Bar);
return foo;
}
}
Agora, você pode usá-lo em seu XAML com a sintaxe de extensão: {ext: Foo Bar = "lol"}
Basta usá-lo da mesma maneira que você usaria qualquer outro MarkupExtension, tais como ligação, DynamicResource, etc.
este link se precisar de mais detalhes.
HTH,
Charles