Bonjour,
Je suis en train de développer une application pour les gestions des membres pour un association (Je débute en programmation). J'utilise MVVM light, EF, WCF.
Lorsque je charge mes membres (80 environ) avec la méthode recheche ( voir ci dessous), j'ai l'application qui est bloqué, pourtant j'ai essayé avec des méthodes async await mais ça ne fonctionne pas. Soit je n'ai pas bien compris leur fonctionnement ou je les utilise mal, je pensais qu'elles effectuaient le traitement dans un autre thread?
Si besoin je peux vous mettre a disposition le projet.
Merci d'avance pour votre aide.
ViewModel de la des membres :
View de ma page d'affichage des membres :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74 // Propriété listview avec les membres private List<Membre> _listMembreData; public List<Membre> ListMembreData { get { return _listMembreData; } set { if (_listMembreData == value) return; _listMembreData = value; RaisePropertyChanged("ListMembreData"); } } //Permet de récupéré la valeur du Progress Ring private bool _progressRingValue = true; public bool ProgressRingValue { get { return _progressRingValue; } set { if (_progressRingValue == value) return; _progressRingValue = value; RaisePropertyChanged("ProgressRingValue"); } } // Fonction pour le moteur de recherche private async void Recherche() { try { ListMembreData = null; ProgressRingValue = true; ListMembreData = await RechercheAsync(TextBoxRechercheValue, CheckArchiveValue, CheckStatusNvxValue, CheckStatusAncienValue, CheckStatusExterieurValue); } catch (Exception ex) { System.Windows.MessageBox.Show("Erreur Moteur de Recherche"); } finally { ProgressRingValue = false; } } Task<List<Membre>> RechercheAsync(String pValeurRecheche, bool pArchive, bool pNvx, bool pAncien, bool pExterieur) { var tcs = new TaskCompletionSource<List<Membre>>(); ServiceMembreClient ServiceMembre = new ServiceMembreClient(); ServiceMembre.RechercheCompleted += (s, e) => { if (e.Error != null) tcs.TrySetException(e.Error); else if (e.Cancelled) tcs.TrySetCanceled(); else tcs.TrySetResult(e.Result); }; ServiceMembre.RechercheAsync(pValeurRecheche, pArchive, pNvx, pAncien, pExterieur); return tcs.Task; }
la listView
Le temps du chargement le Progress Ring
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 <ListView x:Name="ListMembre" ItemsSource="{Binding Path=ListMembreData, Mode=OneWay}" SelectedItem="{Binding Path=ListMembreDataSelectedItem, Mode=TwoWay}" SelectionMode="Single" Grid.Column="1" Grid.Row="1" Margin="10,0,20,10" Grid.RowSpan="2" VerticalAlignment="Top" > <i:Interaction.Triggers> <i:EventTrigger EventName="MouseDoubleClick"> <cmd:EventToCommand Command="{Binding DoubleClickModifierMembreViewModelCommand, Mode=OneWay}" MustToggleIsEnabled="True" MustToggleIsEnabledValue="True" CommandParameter="{Binding ElementName=ListMembre, Path=SelectedItem}" /> </i:EventTrigger> </i:Interaction.Triggers> <ListView.View> <GridView> <GridViewColumn DisplayMemberBinding="{Binding Path=MembreId}" Header="Membre Id" Width="Auto"/> <GridViewColumn DisplayMemberBinding="{Binding Path=Civilite.Titre}" Header="Civilité"/> <!-- Columne Identité --> <GridViewColumn Header="Identité" > <GridViewColumn.CellTemplate> <DataTemplate> <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" > <ItemsControl ItemsSource="{Binding Path=Nom}"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <WrapPanel Orientation="Horizontal" HorizontalAlignment="Center" /> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ItemsControl.ItemTemplate> <DataTemplate> <StackPanel> <TextBlock Text="{Binding}"/> </StackPanel> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> <TextBlock Text=" " /> <ItemsControl ItemsSource="{Binding Path=Prenom}"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <WrapPanel Orientation="Horizontal" HorizontalAlignment="Center" /> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ItemsControl.ItemTemplate> <DataTemplate> <StackPanel> <TextBlock Text="{Binding}" /> </StackPanel> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </StackPanel> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> </GridView> </ListView.View> </ListView>
Un toggle Swith permettant d’effectué des recherches dans la liste
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <Controls:ProgressRing IsActive="{Binding ProgressRingValue}" Grid.Column="1" Grid.Row="1" Margin="0,0,70,30"/>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 <Controls:ToggleSwitchButton x:Name="CheckArchive" IsChecked ="{Binding CheckArchiveValue}" Width="61" Margin="15,0,0,0" > <i:Interaction.Triggers> <i:EventTrigger EventName="Unchecked"> <cmd:EventToCommand Command="{Binding CheckedViewModelCommand, Mode=TwoWay}" /> </i:EventTrigger> <i:EventTrigger EventName="Checked"> <cmd:EventToCommand Command="{Binding CheckedViewModelCommand, Mode=TwoWay}" MustToggleIsEnabled="True" MustToggleIsEnabledValue="True" CommandParameter="{Binding ElementName=CheckArchive, Path=IsChecked}" /> </i:EventTrigger> </i:Interaction.Triggers> </Controls:ToggleSwitchButton>
Partager