Llamar a un constructor parametrizado desde XAML

Al usar WPF noté que cuando agrego un control a un archivo XAML, se llama al constructor predeterminado.

¿Hay alguna manera de llamar a un constructor parametrizado?

.NET 4.0 trae una nueva característica que desafía la respuesta.

x: Directiva de argumentos

  oneOrMoreObjectElements   

Me doy cuenta de que llego tarde a la fiesta aquí, pero como nadie realmente se dirigió a las convenciones de WPF, pensé que iba a sonar.

Uno de los principios rectores de los objetos compatibles con XAML es que deben ser completamente utilizables con un constructor predeterminado, es decir, no existe un comportamiento al que solo se pueda acceder cuando se utiliza un constructor no predeterminado. Para adaptarse a la naturaleza declarativa de XAML, los parámetros del objeto se especifican a través de los establecedores de propiedades. También hay una convención que dice que el orden en que las propiedades se establecen en XAML no debería ser importante.

Sin embargo, puede tener algunas consideraciones especiales que son importantes para su implementación pero que están en desacuerdo con la convención:

  1. Puede tener una o más propiedades que se deben establecer antes de poder usar el objeto.
  2. Dos o más propiedades pueden ser mutuamente excluyentes entre sí, por ejemplo, no tiene sentido establecer StreamSource y UriSource de una imagen.
  3. Es posible que desee asegurarse de que una propiedad solo se establezca durante la inicialización.
  4. Una propiedad puede depender de otra, lo que puede ser complicado debido a la convención antes mencionada de independencia de orden al establecer propiedades.

Para facilitar el manejo de estos casos, se proporciona la interfaz ISupportInitialize . Cuando un objeto se lee y se crea a partir de XAML (es decir, se analiza), los objetos que implementan ISupportInitialize se manejarán especialmente:

  1. Se llamará al constructor predeterminado.
  2. BeginInit() se llamará.
  3. Las propiedades se establecerán en el orden en que aparecieron en la statement XAML.
  4. EndInit() .

Al hacer un seguimiento de las llamadas a BeginInit() y EndInit() , puede manejar las reglas que necesite imponer, incluido el requisito de que se establezcan ciertas propiedades. Así es como debe manejar los parámetros de creación; no requiriendo argumentos de constructor

Tenga en cuenta que también se proporciona ISupportInitializeNotification , que extiende la interfaz anterior agregando una propiedad IsInitialized y un evento Initialized . Recomiendo usar la versión extendida.

No. No de XAML [cuando se usa WPF].

Sí, puede hacerlo mediante ObjectDataProvider . Le permite llamar al constructor no predeterminado, por ejemplo:

     Joe      

asumiendo que esa persona es

 public class Person { public Person(string Name) { this.Name = Name; } public string Name { get; set; } } 

Desafortunadamente no puedes unir los parámetros de ConstructorParameters . Vea alguna solución aquí .