Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

RSS iMasters

[Resolvido] WPF - DataBinding com Entity Framework 4.1 e Code Fir

Recommended Posts

Na primeira parte deste artigo, criou-se o projeto e definiu-se o modelo conceitual e o contexto usando o Entity Framework 4.1 e o Code-First. Agora, é preciso definir a aplicação WPF e realizar o databinding. 

Primeiro, selecione o projeto WPF_Interface e clique com o botão direito do mouse, selecionando a opção Add Reference. A seguir, inclua no guia Projects uma referência ao projeto EscolaModel, onde será definido o modelo e o contexto clicando em OK.

41670.gif

Agora, inclua uma referência ao Entity Framework no projeto WPF_Intefface. Clique com o botão direito do mouse sobre o projeto e selecione Add Reference e, depois, selecione a guia Browse da janela Add Reference e localize o arquivo EntityFramework.dll na pasta onde você instalou o Entity Framework 4.1.

41672.gif

Neste momento, no menu Debug, clique em Build WPF_Interface para compilar o projeto. A próxima tarefa é realizar a vinculação dos objetos aos controles WPF.  É preciso, então, incluir classes que são definidas no modelo como fonte de dados para essa aplicação WPF.

No menu Data, clique em Add New Data Sources. Na janela do assistente, selecione Object e clique no botão Next>.

41674.gif

Na próxima janela do assistente, expanda o item EscolaModel e selecioneo campo Curso. Não é necessário selecionar Aluno, pois podemos acessá-lo via propriedade Aluno, da fonte de dados Curso.

41676.gif

Clique no botão Finish. No menu Data, selecione Show Data Sources para exibir a fonte de dados que foi recém-criada, conforme a figura abaixo:

41678.gif

Selecione a fonte de dados Curso e arraste e solte na janelaMainWindow.xaml. Serão adicionados ao XAML o resource CollectionViewSource CursoViewSource e o controleDataGrid CursoDataGrid.

41680.gif

O resource CursoViewSource serve como uma fonte de vinculação para o elemento Grid mais externo. A fonte do binding é especificada pela definição da propriedade DataContext do elemento Grid pai para "{StaticResource CursoViewSource}". Os elementos internos do Grid herdam o valor DataContext a partir do Grid pai ( a propriedade ItemsSource do CursoDataGrid é definida para "{Binding}").

Na janela Data Source, selecione a propriedade Aluno de Curso, arraste e solte na janela MainWindow.

41682.gif

O resource CursoAlunoViewSource e o grid AlunoDataGrid serão incluídos no arquivo XAML onde o caminho de vinculação para esteresource está definido para Aluno de forma que, quando executarmos a aplicação, somente os alunos relacionados com o curso selecionado serão exibidos no Grid.

Finalmente, inclua um controle Button, a partir da ToolBox, na base da janela com Content igual a Salvar e ID igual a btnSalvar.

41684.gif

Agora, resta definir o código dos eventos 'Click' do botão, 'Loaded' da janela e 'OnClosing' da janela MainWindow. Abra o arquivo MainWindow.xaml.vb e defina o seguinte código:

Imports EscolaModel

Imports System.Data.Entity

 

Class MainWindow

 

Dim _contexto As EscolaEntidades = New EscolaEntidades

 

Private Sub Window_Loaded(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded

 

Dim CursoViewSource As System.Windows.Data.CollectionViewSource =

CType(Me.FindResource("CursoViewSource"), System.Windows.Data.CollectionViewSource)

 

CursoViewSource.Source = _contexto.Cursos.Local

 

End Sub

 

Private Sub btnSalvar_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles btnSalvar.Click

 

For Each aluno In _contexto.Alunos.Local.ToList()

If aluno.Curso Is Nothing Then

_contexto.Alunos.Remove(aluno)

End If

Next

 

_contexto.SaveChanges()

' Chama Refresh() para mostrar o alunoID do CursoID gerados

' Se desejar que a UI seja notificada e atualizada automaticamente

' sempre que uma propriedade for atualizada suas classes precisam

' implementar a interface INotifyPropertyChanged

Me.CursoDataGrid.Items.Refresh()

Me.AlunoDataGrid.Items.Refresh()

End Sub

 

Protected Overrides Sub OnClosing(e As System.ComponentModel.CancelEventArgs)

MyBase.OnClosing(e)

Me._contexto.Dispose()

End Sub

 

End Class

Agora tudo está pronto para executar a aplicação e verificar os resultados. Quando executar a aplicação pela primeira vez, o Entity Framework usará as convenções padrão para criar o banco de dados em localhostinstância do SQLEXPRESS, mais o nome do tipo totalmente qualificado do contexto derivado (EscolaModel.EscolaEntidades). Nas execuções posteriores, a menos que o modelo seja alterado, o banco de dados já existente será usado. Você pode alterar o comportamento padrão, substituindo o código de convenções do Code First com anotações.

Defina o projeto WPF_Interface como projeto a ser executado clicando com o botão direito do mouse sobre o projeto e selecione Set as Startup Project. Compile e execute a aplicação, e assim terá, após alguns segundos, a apresentação da janela abaixo:

41686.gif

Neste momento, se abrir o SQL Server Management Studio, você irá verificar o banco de dados EscolaModel.EscolaEntidadese as tabelas Alunoes e Cursoes (o plural em inglês) criadas com sucesso, segundo a convenção do Entity Framework:

41687.gif

Digite um valor para o curso e respectivo aluno conforme mostra a figura a seguir e clicar no botão Salvar:

41689.gif

Se espiarmos o banco de dados usando oSQL Server Management Studio, você irá constatar que o registro foi gravado na tabela:

41692.gif

Faça o download do projeto completo aqui: WPF_CodeFirst.zip

 

http://imasters.com.br/artigo/22442/dotnet/wpf-databinding-com-entity-framework-41-e-code-first-parte-02

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.