DTO - Data Transfer Objects são exatamente como diz, containers para transferência de dados. Eles não têm comportamento, mas apenas um grupo de setters e getters. Algumas pessoas os tornam imutáveis e apenas criam novos quando necessário, em vez de atualizar os existentes. Eles devem ser serializáveis para permitir a transferência através do fio.
Geralmente, os DTOs são usados para enviar dados de uma camada para outra através dos limites do processo, pois as chamadas para um serviço remoto podem ser caras, de modo que todos os dados necessários são colocados em um DTO e transferidos para o cliente em um bloco (granulação grossa).
No entanto, algumas pessoas usam a noção de DTOs ligados à tela (nada a ver com o cruzamento dos limites do processo). Novamente, eles são preenchidos com os dados necessários (geralmente os dados necessários para uma tela específica e podem ser uma agregação de dados de várias fontes) e enviados ao cliente.
http://blog.jpboodhoo.com/CommentView,guid,21fe23e7-e42c-48d8-8871-86e65bcc9a50.aspx
Em casos simples, como já foi declarado, este DTO pode ser usado para vincular à visualização, mas em casos mais complexos, exigiria a criação de um ViewModel e o descarregamento de dados do DTO para ViewModel, o que obviamente é mais trabalhoso (ao aplicar o padrão MVVM) .
Então, novamente, como já foi afirmado DTO! = ViewModel
e
DTO e ViewModel têm finalidades diferentes na vida