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);
Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top