Il s'agit en fait d'un sujet assez vaste. Cependant, pour garder les choses simples, et exclure les modèles de conception et MVVM Frameworks pour l'instant ...
Vous auriez besoin de créer;
A WPF XAML Voir ayant:
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="728" Width="772">
<Grid>
<DataGrid AutoGenerateColumns="True" ItemsSource="{Binding MyDataGridDataSource}" HorizontalAlignment="Center" Margin="0,88,0,0" VerticalAlignment="Top" Height="286" Width="584"/>
<Grid Margin="0,403,0,0" VerticalAlignment="Top" HorizontalAlignment="Center" >
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Label Content="Start Date:" HorizontalAlignment="Left" Margin="10,8,0,0" VerticalAlignment="Top"/>
<DatePicker SelectedDate="{Binding StartDate}" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Grid.Column="1"/>
<Label Content="End Date:" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Grid.Column="2"/>
<DatePicker SelectedDate="{Binding EndDate}" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Grid.Column="3"/>
</Grid>
</Grid>
</Window>
Une VieModel classe appelée quelque chose comme clsMyTemperatureViewModel:
Imports System.Collections.ObjectModel
Imports System.ComponentModel
''' <summary>
''' Only for Simulating the EF Context!
''' </summary>
''' <remarks></remarks>
Public Class TableTemperatures
Public Property LogTime As Date
Public Property Temperature As Double
End Class
Public Class clsMyTemperatureViewModel : Implements INotifyPropertyChanged
Private _ListOfTemperatures As ObservableCollection(Of TableTemperatures)
Private _MyDataGridDataSource As ObservableCollection(Of TableTemperatures)
Public Property MyDataGridDataSource As ObservableCollection(Of TableTemperatures)
Get
Return _MyDataGridDataSource
End Get
Set(value As ObservableCollection(Of TableTemperatures))
_MyDataGridDataSource = value
OnPropertyChanged("MyDataGridDataSource")
End Set
End Property
Private _StartDate As Date
Public Property StartDate As Date
Get
Return _StartDate
End Get
Set(value As Date)
If _StartDate <> value Then
_StartDate = value
OnPropertyChanged("StartDate")
GetResults()
End If
End Set
End Property
Private _EndDate As Date
Public Property EndDate As Date
Get
Return _EndDate
End Get
Set(value As Date)
If _EndDate <> value Then
_EndDate = value
OnPropertyChanged("EndDate")
GetResults()
End If
End Set
End Property
Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged
Public Sub OnPropertyChanged(ByVal PropertyChangeName As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(PropertyChangeName))
End Sub
Public Sub GetResults()
Dim query = From TemperatureList In _ListOfTemperatures
Where TemperatureList.LogTime >= StartDate
Where TemperatureList.LogTime <= EndDate
Select TemperatureList
MyDataGridDataSource = New ObservableCollection(Of TableTemperatures)(query)
End Sub
Public Sub New()
'
' Only for Simulating the EF Context!
'
_ListOfTemperatures = New ObservableCollection(Of TableTemperatures)
_ListOfTemperatures.Add(New TableTemperatures With {.LogTime = New Date(2012, 9, 1), .Temperature = 14})
_ListOfTemperatures.Add(New TableTemperatures With {.LogTime = New Date(2012, 10, 2), .Temperature = 15})
_ListOfTemperatures.Add(New TableTemperatures With {.LogTime = New Date(2012, 11, 3), .Temperature = 16})
_ListOfTemperatures.Add(New TableTemperatures With {.LogTime = New Date(2012, 12, 4), .Temperature = 17})
_ListOfTemperatures.Add(New TableTemperatures With {.LogTime = New Date(2013, 1, 5), .Temperature = 18})
StartDate = New Date(2011, 1, 1)
EndDate = New Date(2014, 1, 1)
GetResults()
End Sub
End Class
Ici, j'ai raillé une petite classe pour reproduire votre contexte EF . Vous devrez toutefois référencer votre contexte EF plutôt que ma collection _ListOfTemperatures. Ce serait quelque chose comme; Le ViewModel expose fondamentalement les propriétés publiques pertinentes à la vue. Une chose importante à noter est que vous devez implémenter l'interface INotifyPropertyChanged et générer l'événement PropertyChanged pour que la vue se mette à jour lorsque les propriétés ont été modifiées dans ViewModel.
Vous devez ensuite ajouter ce qui suit à votre code derrière New Sub;
Me.DataContext = New clsMyTemperatureViewModel
Cela définira le DataContext de votre vue sur le nouveau ViewModel.
Comme je l'ai mentionné précédemment, cet exemple n'essaie pas d'impliquer des Frameworks MVVM, ni d'utiliser des Patterns de conception appropriés.
Vous devriez vraiment utiliser le modèle de référentiel pour vos données.C'est dans ce Repository que vous placez votre code Linq to Entities, renvoyant uniquement une ObservableCollection à votre ViewModel.
Vous devez créer une solution ayant;
- Un projet qui abritera votre EF Contexte
- Un projet pour Référentiels Base de données
- Un projet pour votre application principale qui aurait à son tour la configuration des dossiers pour vos vues, modèles de vue, classes, Behaviors etc.
Cependant, j'espère que ça vous va!
Merci pour cela, C'est exactement ce que je cherchais –
Content que je puisse vous aider! – PGallagher