Nel nostro prodotto, utilizziamo il primo approccio del modello MVVM e funziona bene, ma con un avvertimento. Quando la visualizzazione diventa complessa, è necessario del tempo per crearla dal modello di dati. Se la vista viene mostrata e nascosta frequentemente, diventa leggermente irritante. Se si utilizza prima la vista, sarebbe abbastanza facile memorizzare una vista in cache se necessario, ma quando si utilizza DataTemplate e il modello per primi, non abbiamo molto controllo sulla creazione della vista. Chiunque ha già risolto questo problema senza passare alla visualizzazione del primo metodo?È possibile memorizzare nella cache la vista quando si utilizza il primo approccio del modello?
risposta
con viewmodel primo approccio penso che non si abbia la possibilità di "memorizzare" la vista. quindi potresti considerare di usare view view e viewmodel locator per i flussi di lavoro dei datatemplates pesanti. here è una soluzione quando si utilizzano datatemplates con elenchi.
ma forse c'è qualche soluzione con l'override del meccanismo datatemplate wpf?
modifica: cosa succede se si crea solo un "markerview" per il tuo viewmodel, quindi wpf datatemplate può trovarlo. e quindi all'interno di questa vista marker crei/reidratri la vista reale? qualcosa come un localizzatore di servizi di visualizzazione?
Funziona perfettamente se si utilizza l'idea @blindmeis.
La ricetta complessiva:
Creare un ContentControl o UserControl denominato ViewCache:
public partial class ViewCache
{
public ViewCache()
{
InitializeComponent();
Unloaded += ViewCache_Unloaded;
}
void ViewCache_Unloaded(object sender, RoutedEventArgs e)
{
Content = null;
}
private Type _contentType;
public Type ContentType
{
get { return _contentType; }
set
{
_contentType = value;
Content = ViewFactory.View(value); // use you favorite factory
}
}
}
Nel DataTemplate, utilizzare il ViewCache, passare il tipo di visualizzazione vera e propria che si desidera utilizzare:
<Window.Resources>
<DataTemplate DataType="{x:Type TestViewCache:Foo}">
<TestViewCache:ViewCache ContentType="{x:Type TestViewCache:View }"/>
</DataTemplate>
</Window.Resources>
<StackPanel>
<ContentPresenter Height="200" Width="300"
Content="{Binding ViewModel}"/>
<Button Content="Set VM" Click="SetVMClick"/>
<Button Content="UnSet VM" Click="UnSetVMClick"/>
</StackPanel>
Grazie ma sarà meglio scrivere var control = visualizza come controllo; control.DataContext = DataContext; Content = view; –
Ehi, Sergey, stavo cercando una soluzione per la cache della vista e ho trovato la tua implementazione. Non capisco come accedere al modello di visualizzazione dal genitore viewmodel quindi. Devo accedere anche al 'ViewCache'? E come viene implementato il cambiamento della vista nel modello di visualizzazione principale? – derape
- 1. Come disattivare modello di memorizzazione nella cache in Entity Framework 6 (codice Primo approccio)
- 2. È possibile l'ereditarietà del modello quando si utilizza la visualizzazione con caratteri forti in MVC3?
- 3. È possibile memorizzare nella cache query LINQ parzialmente eseguite?
- 4. MVC .Net Eliminazione in cascata quando si utilizza il primo approccio al codice EF
- 5. È possibile memorizzare nella cache i metodi POST in HTTP?
- 6. Come posso visualizzare il contorno in eclissi quando si utilizza il modello del modulo rivelatore?
- 7. È possibile eseguire la manipolazione bytecode quando si utilizza OSGi?
- 8. Eccezione MKMapKit quando si utilizza canShowCallout nella vista annotazione
- 9. È consentito memorizzare nella cache le google maps statiche?
- 10. come memorizzare nella cache asyncio coroutine
- 11. Quando si utilizza Express con NodeJS - Come funziona View Cache?
- 12. Chrome si rifiuta di memorizzare nella cache Javascript
- 13. Come memorizzare nella cache il risultato della query in django?
- 14. PHP APC Per memorizzare o non memorizzare nella cache?
- 15. Yii2: come memorizzare nella cache il fornitore di dati attivo?
- 16. In C#, quando si utilizza l'elenco <T>, è opportuno memorizzare nella cache la proprietà Count o la proprietà è abbastanza veloce?
- 17. Utilizza la cache dell'applicazione solo quando è offline
- 18. Come impostare i dati del modello in ActionFilterAttribute quando si utilizza una vista digitata
- 19. È possibile memorizzare puntatori nella memoria condivisa senza utilizzare offset?
- 20. Perché non è possibile combinare gli attributi [Autorizza] e [OutputCache] quando si utilizza la cache di Azure (app .NET MVC3)?
- 21. Perché memorizzare oggetti jQuery nella cache?
- 22. Ascolta per primo TouchEvent quando si utilizza SYSTEM_UI_FLAG_HIDE_NAVIGATION
- 23. È possibile memorizzare nella cache una ricerca di funzioni virtuali in C++?
- 24. Come memorizzare nella cache le letture?
- 25. Per memorizzare nella cache o di non memorizzare nella cache - GetCustomAttributes
- 26. vista vuoto quando si utilizza ngResource
- 27. È possibile precaricare e memorizzare nella cache i file video senza aggiungerli al DOM?
- 28. Come memorizzare nella cache in Blackberry BrowserField
- 29. Perché utilizzare l'addetto all'assistenza per la memorizzazione nella cache quando la cache del browser gestisce la memorizzazione nella cache?
- 30. Intestazioni HTTP per la memorizzazione nella cache più permanente possibile
Neat idea sul "markerview", vedrò se funziona ... –
fammi sapere se funziona;) – blindmeis