none
MVVM com banco de dados RRS feed

  • Pergunta

  • Boa tarde,

    Como eu posso usar MVVM com banco de dados? pois todos os exemplos que eu vejo, não tem banco de dados. alguem pode me mostrar alguns exemplos?

    quinta-feira, 1 de novembro de 2012 18:12

Todas as Respostas

  • Alci,

    MVVM pode e deve acessar banco de dados, normalmente, como se estivesse chamando de dentro de um evento de um botão como normalmente era feito.

    Sobre o aspecto de arquitetura, é inteligente criar uma camada de acesso a dados e fazer a sua VM comunicar com essa camada, ao invés de acessar diretamente o banco de dados.

    segunda-feira, 5 de novembro de 2012 19:08
  • Boa tarde,

    Tem como você dar um exemplo? pode ser simples mesmo. Obrigado

    segunda-feira, 5 de novembro de 2012 19:57
  • Alci,

    imagine que você tem uma tabela de clientes no seu banco de dados. Você vai criar uma classe Cliente com uma propriedade para cada campo da tabela. Esta classe Cliente pode ter um método estático que vai ao banco de dados, busca os dados de um determinado cliente e retorna um objeto da classe Cliente com as propriedades inicializadas com o valor do registro encontrado. A partir daí, você esquece o banco de dados. Esta classe cliente vai ser o seu Model e conterá toda a lógica de validação do valor das propriedades e também métodos para atualizar e excluir no banco de dados o cliente que ela estiver armazenando nas propriedades. Você terá uma classe para ser a View da classe Cliente. Esta classe poderá ser um objeto da classe Window, UserControl ou derivada da classe Control. Isto para possuir a propriedade DataContext. Esta propriedade DataContext será atribuída com um objeto da classe Cliente ou uma classe que fará a intermediação entre o objeto Cliente e sua View. Neste caso, a classe intermediária é a viewmodel. A função da viewmodel costuma ser a de conter objetos do tipo Command que são ligados a elementos de comando da View pelo XAML. Nos methodos de execução destes commands, a viewmodel realiza ações no objeto Model, que ela referencia em uma das suas propriedades. Sendo o Model uma propriedade da viewmodel, ele pode ser exposto através desta propriedade para a view, desde que o Model implemente a interface INotifyPropertyChanged para notificar a View de qualquer mudança em suas propriedades. A view poderá ligar seus elementos de exibição e edição de dados às propriedades do Model para que os dados possam ser exibidos e editados na view. Outra função da viewmodel e conter coleções de itens que servirão para preencher listas nas views e tratar erros de conversão no sentido view-->model e exibir na view os erros de validação gerados pelo model à medida que o usuário editar as informações na view.

    Após terminar a edição, o usuário clica no botão Salvar e um command ligado ao botão é executado na viewmodel. O método de execução do comando se encarrega de consultar o model para saber se ele está com valores válidos. Se estiver, chamará um método do model que o gravará no banco de dados.

    Você pode estar se perguntando sobre quem conecta as viewmodels às views e comanda a exibição das views. Bem, as viewmodels que respondem a um comando que exige a exibição de uma nova viewmodel conectada à sua view podem recorrer a um objeto que faz este serviço à parte ou usar classes derivadas de TriggerAction como acontece na documentação do framework Prism, que você baixa de graça do site da Microsoft junto com a documentação.

    Para automatizar ainda mais, os DataTemplates são usados para definir uma aparência visual a uma viewmodel. Você pode então ter uma Window com um ContentControl que liga sua propriedade Content ao DataContext da Window. Ao atribuir uma viewmodel à propriedade DataContext desta Window genérica, ao ser exibida, ela exibirá no seu interior a viewmodel conforme sua aparência definida no DataTemplate.

    Isto é apenas em linhas gerais, pois as coisas são mais complexas ainda na prática. 


    Codelines


    • Editado Codelines terça-feira, 6 de novembro de 2012 11:13 melhora
    terça-feira, 6 de novembro de 2012 10:43
  • Boa tarde!

    Conseguiu alguma coisa Alci? estou com o mesmo problema...nao consigo atribuir os dados do banco a minhas propriedades...

    segunda-feira, 5 de agosto de 2019 20:53