In generale, ho inizializzato le proprietà dello Window
prima dello InitializeComponent()
e dell'impostazione dei controlli contenuti in seguito. Tuttavia, non sono stato del tutto coerente, e non ho notato un problema con l'ordinamento. Quindi:In un costruttore per una finestra WPF, cosa deve succedere prima di InitializeComponent() e dopo?
- Sono (potenzialmente) facendo qualcosa di orribile? In particolare, ci sono problemi con l'impostazione delle proprietà dei controlli figlio prima dello
InitializeComponent()
? - Qual è il bello stile in questo senso?
Edit: Dato che le prime due risposte che ho ricevuto sono stati un po 'contraddittorio, mi permetta di essere più specifico:
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);
}
È questo circa la destra? Dovrei semplicemente fare MVVM e non avere nulla nel mio costruttore Window
?
E 'importante notare che, se si utilizza MVVM, il DataContext deve essere impostata prima di ** ** di chiamare InitializeComponent(), oppure le associazioni ViewModel non sarà possibile ottenere impostato correttamente. InitializeComponent() chiama tutti i getter di associazione di proprietà, quindi se viene chiamato per primo, i bind non otterranno i valori corretti finché non verrà richiamato NotifyPropertyChanged su ciascuna proprietà. Questo stesso principio si applica a qualsiasi altra logica di inizializzazione che possa influire sul modo in cui xaml viene inizializzato. – jeff17237