ListView MultiSelect, MVVM and RoutedCommands
Your approach looks fine to me. Except i would probably use prefix-casting, to get cast exceptions straigt away if something goes wrong, instead of using as.

This can be achieved without modifying code-behind tho. You can bind container's IsSelected property to appropriate item's viewmodel property.

&lt;ListView.ItemContainerStyle&gt;
    &lt;Style TargetType="ListViewItem" &gt;
        &lt;Setter Property="IsSelected" Value="{Binding IsSelected}"/&gt;
    &lt;/Style&gt;
&lt;/ListView.ItemContainerStyle&gt;


Then you can access selected items in your viewmodel by using:

protected IEnumerable&lt;Item&gt; SelectedItems { get { return Items.Where(x =&gt; x.IsSelected); } }