.NET

14 out, 2011

WPF – DataBinding com Entity Framework 4.1 e Code First – Parte 02

Publicidade

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.

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.

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>.

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

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:

Selecione a fonte de dados Curso e arraste e solte na janela
MainWindow.xaml. Serão adicionados ao XAML o resource
CollectionViewSource CursoViewSource e o controle
DataGrid CursoDataGrid.

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.

O resource CursoAlunoViewSource e o grid AlunoDataGrid serão
incluídos no arquivo XAML onde o caminho de vinculação para este
resource 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.

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:

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

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

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

Faça o download do projeto completo aqui:

WPF_CodeFirst.zip