Ho un controllo codificato in WPF che può avere uno dei tre elementi figlio - due SimpleChildElement e un ComplexChildElement, diciamo - e lo scambio tra la visualizzazione di essi in base a qualche logica dietro le quinte nel modello che mi consente Fai questo.Prerendering/hiding on load con WPF MVVM?
<ItemsControl
ItemsSource="{Binding ChildPanels.Values}"
Name="ContentControl1"
>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ContentControl Content="{Binding}"
Visibility="{Binding Path=Active, Converter={StaticResource BooleanToVisibilityConverter}}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Gli elementi secondari sono i propri ViewModels e ho alcune risorse dichiarate a monte quindi ci sono DataTemplates per loro. Posso approfondire l'argomento se questo può essere d'aiuto, ma l'elemento cruciale del problema è questo:
Quando sto scorrendo gli elementi nel controllo principale e ComplexChildElement appare per la prima volta, c'è un breve, appena visibile sfarfallio come viene decorato - è un mucchio di scatole combinate decorate con DevExpress. Questa impostazione significa che non c'è sfarfallio quando faccio scorrere un record con ComplexChildElement e di nuovo indietro, e se inizio la visualizzazione del controllo master con un ComplexChildElement, non c'è sfarfallio quando si apre di nuovo.
Ma il controllo principale è impostato su un'altra origine dati e non posso garantire che ci sarà un ComplexChildElement nel primo record, che viene caricato in fase di inizializzazione da un quadro di visualizzazione più grande. Non voglio davvero fare il root al momento.
Quindi, come posso garantire che ComplexChildElement venga sottoposto a rendering quando il modulo viene caricato e, eventualmente, nascosto subito dopo? Ho già provato la commutazione ChildPanels.Active e disattivare all'interno della funzione dietro questo:
<dxmvvm:Interaction.Triggers>
<dxmvvm:EventToCommand EventName="Loaded" Command="{Binding OnViewLoadedCommand}" />
</dxmvvm:Interaction.Triggers>
ma questo non farli per il rendering.
Tale funzione, tra l'altro:
foreach (var childModel in ChildPanels.Values)
{
childModel.Active = true;
RaisePropertyChanged(() => childModel.Active);
}
ChangeChildModel();
con l'ultima chiamata di funzione di essere colui che è chiamato a modificare la visibilità modello del bambino quando il record modifiche. Se non effettuo l'ultima chiamata, tutti i modelli di visualizzazione figlio iniziano visibili.
"Ho già provato la commutazione ChildPanels.Active dentro e fuori la funzione dietro a questo: ... ma questo non gli permette di renderizzare. " Penso che sia un buon posto per pre-renderizzare la vista. Ma perché non lo mostra affatto? – Tyress
IDK, anche se ho aggiunto la funzione alla domanda stessa. Quando eseguo le cose in modalità di debug e inserisco un punto di interruzione nella funzione, in realtà non vedo alcun elemento dell'interfaccia utente visibile quando è in esecuzione, se questo aiuta. – Glazius
Cosa fa ChangeChildModel()? :) Se lo smaltisci non lo stai pre-rendering, vero? – Tyress