Pergunta

Em minha viagem para a aprendizagem MVVM Eu já estabelecido algum entendimento básico do WPF e do padrão de ViewModel. Eu estou usando o seguinte abstração ao fornecer uma lista e estou interessado em um único item selecionado.

public ObservableCollection<OrderViewModel> Orders { get; private set; }
public ICollectionView OrdersView
{
    get
    {
        if( _ordersView == null )
            _ordersView = CollectionViewSource.GetDefaultView( Orders );
        return _ordersView;
    }
}
private ICollectionView _ordersView;

public OrderViewModel CurrentOrder 
{ 
    get { return OrdersView.CurrentItem as OrderViewModel; } 
    set { OrdersView.MoveCurrentTo( value ); } 
}

I podem, em seguida, se ligam a OrdersView juntamente com o apoio de triagem e de filtragem para uma lista no WPF:

<ListView ItemsSource="{Binding Path=OrdersView}" 
          IsSynchronizedWithCurrentItem="True">

Isso funciona muito bem para vistas seleção única. Mas eu gostaria de também apoiar várias seleções na exibição e ter o ligamento modelo para a lista de itens selecionados.

Como é que eu ligam os ListView.SelectedItems para uma propriedade apoiador sobre o ViewModel?

Foi útil?

Solução

Adicionar uma propriedade IsSelected para o seu filho ViewModel (OrderViewModel no seu caso):

public bool IsSelected { get; set; }

Bind a propriedade selecionada no recipiente para isso (para ListBox, neste caso):

<ListBox.ItemContainerStyle>
    <Style TargetType="{x:Type ListBoxItem}">
        <Setter Property="IsSelected" Value="{Binding Mode=TwoWay, Path=IsSelected}"/>
    </Style>
</ListBox.ItemContainerStyle>

IsSelected é atualizado para coincidir com o campo correspondente no recipiente.

Você pode obter as crianças selecionadas no modelo de vista, fazendo o seguinte:

public IEnumerable<OrderViewModel> SelectedOrders
{
    get { return Orders.Where(o => o.IsSelected); }
}

Outras dicas

Se você estiver usando MVVM-LIGHT você pode usar este padrão:

https: // galasoft .ch / posts / 2010/05 / manuseio-datagrid-SelectedItems-em-um-maneira-friendly-mvvm

Não especialmente elegante, mas parece que ele deve ser confiável, pelo menos

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