Utilizando uma caixa de listagem (ou outro ItemsControl) a hospedeiras apresentadores Caliburn

StackOverflow https://stackoverflow.com/questions/1807630

Pergunta

Se eu tiver um MultiPresenter e eu estou usando um ListBox para exibir o Presenters é hospedagem, como faço para obter Caliburn para descobrir e ligam os pontos de vista e ver os modelos para os itens?

Por exemplo, se eu tenho uma visão simples que é algo como isto:

<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>

O que é vinculado ao CarViewModel:

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

E a coleção Parts contém vários objetos que implementam IPresenter e têm vistas correspondentes, por exemplo, WheelViewModel e WheelView e EngineViewModel e EngineView.

Eu gostaria Caliburn para resolver os pontos de vista para mim usando a estratégia de vista. Isso é possível? O que eu preciso fazer para configurar corretamente a hierarquia dos apresentadores neste caso?

Foi útil?

Solução

Você não tem que mudar hierarquia apresentador para isso. Eu só sugiro que você considere o uso da propriedade MultiPresenter.Presenters a ViewModels criança de coleta e os métodos MultiPresenter.Open e MultiPresenter.Shutdown se você precisar impor ViewModels criança ciclo de vida.

Para a emissão de ligação, você deve definir o modelo para os itens de caixa de listagem:

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

Usando cal:View.Model anexado a propriedade, o quadro se encarrega de criar uma visão apropriada para cada ViewModel, ligando-o para o ViewModel e injetá-lo no ContentControl.

Você também deve certificar-se de que o seu namespace e classe de nomeação para Visualizações e ViewModels segue o Caliburn padrão convenção se você deseja que os seus pontos de vista sejam corretamente inferida pela estrutura. Caso contrário, você tem que escrever uma IViewStrategy personalizado (não é difícil, embora).


Editar: expressão de ligação fixo em cal: View.Model propriedade

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top