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 :

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;
 
        }
View de ma page d'affichage des membres :

la listView
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>
Le temps du chargement le Progress Ring

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"/>
Un toggle Swith permettant d’effectué des recherches dans la liste

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>