Domanda

Se ho un MultiPresenter e sto usando un ListBox per visualizzare il Presenters che sta ospitando, come faccio a scoprire Caliburn e associare le visualizzazioni e visualizzare i modelli per gli articoli?

Ad esempio, se ho una vista semplice che assomiglia a questa:

<UserControl x:Class="MyProject.Views.CarView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
        <ListBox ItemsSource="{Binding Parts}" />
    </Grid>
</UserControl>

Che è associato al CarViewModel :

public class CarViewModel : MultiPresenter
{
    public BindableCollection<IPartViewModel> Parts { get; }
}

E la raccolta Parti contiene vari oggetti che implementano IPresenter e hanno viste corrispondenti, ad es. WheelViewModel e WheelView e EngineViewModel e EngineView .

Vorrei che Caliburn risolvesse le visualizzazioni usando la strategia di visualizzazione. È possibile? Cosa devo fare per impostare correttamente la gerarchia dei presentatori in questo caso?

È stato utile?

Soluzione

Non è necessario cambiare la gerarchia dei presentatori per questo. Ti consiglio di prendere in considerazione l'utilizzo della proprietà MultiPresenter.Presenters per raccogliere ViewModels figlio e i metodi MultiPresenter.Open e MultiPresenter.Shutdown se necessario per imporre il ciclo di vita di ViewModels figlio.

Per il problema dell'associazione, è necessario definire il modello per gli elementi ListBox:

<ListBox ItemsSource="{Binding Parts}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <ContentControl cal:View.Model="{Binding}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Utilizzando cal: View.Model , la struttura si occupa della creazione di una vista appropriata per ciascun ViewModel, associandola al ViewModel e iniettandola nel ContentControl.

Dovresti anche assicurarti che il tuo spazio dei nomi e la denominazione della classe per Views e ViewModels seguano il Caliburn convenzione predefinita se si desidera che le proprie viste siano correttamente dedotte dal framework. Altrimenti, devi scrivere un IViewStrategy personalizzato (non è difficile, però).


Modifica: fissa l'espressione di associazione in cal: proprietà View.Model

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top