En general, he estado inicializando las propiedades del Window
antes del InitializeComponent()
y configurando los controles que se encuentran en él. Sin embargo, no he sido tan consistente, y realmente no he notado un problema con el orden. Entonces:En un constructor para una ventana de WPF, ¿qué debería pasar antes de InitializeComponent() y qué después?
- ¿Estoy (potencialmente) haciendo algo horrible? En particular, ¿hay algún problema con la configuración de las propiedades de los controles secundarios antes del
InitializeComponent()
? - ¿Qué es un buen estilo en este sentido?
Editar: Dado que las dos primeras respuestas que recibí fueron un poco contradictorio, quiero ser más específico:
public Foo Foo {get; protected set}
public FooWindow (Foo foo)
{
Foo = foo;
this.Closing += FooWindow_Closing;
Foo.Frobbed += Foo_Frobbed;
InitializeComponent();
this.DataContext = this;
this.Title = Foo.Name() + " Window";
FooListView.ItemSource = Foo.CalculateList();
FocusManager.SetFocusedElement(this, FooListView);
}
es eso de verdad? ¿Debería hacer MVVM y no tener nada en mi constructor Window
?
Es importante señalar que, si se utiliza MVVM, el DataContext se debe establecer antes ** ** llamar a InitializeComponent() o bien sus fijaciones ViewModel no conseguirá establecer correctamente. InitializeComponent() llama a todos los getters de enlace de propiedad, por lo que si se llama primero, sus enlaces no obtendrán los valores adecuados hasta que se llame nuevamente a NotifyPropertyChanged en cada una de sus propiedades. Este mismo principio se aplica a cualquier otra lógica de inicialización que pueda afectar cómo se inicializa su xaml. – jeff17237