Bonsoir à tous,
D'abord voici deux classes :
Code c# : 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 public class Gamme { public string NomGamme { get; set; } public int Code { get; set; } private ObservableCollection<Produit> _produits = new ObservableCollection<Produit>(); public ObservableCollection<Produit> Produits { get { return _produits; } set { _produits = value; } } private string _nbproduitachete; public string NbProduitAchete { get { var query = (from element in Produits where element.EtatAchat == true select element); _nbproduitachete = query.Count().ToString(); return _nbproduitachete; } set { _nbproduitachete = value; } } }
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public class Produit { public string NomProduit { get; set; } public bool EtatAchat { get; set; } }
Ensuite, je binde une ObservableCollection<Gamme> à un ListBox dont voici le style appliqué (simplifié):
Code xml : 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 <Style x:Key="ListBoxItemGamme" TargetType="ListBoxItem"> <Setter Property="SnapsToDevicePixels" Value="true"/> <Setter Property="OverridesDefaultStyle" Value="true"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="ListBoxItem"> <Border x:Name="Border" BorderBrush="#FF999999" Padding="3" Margin="5" BorderThickness="0.5" Background="Transparent" CornerRadius="3"> <Grid> <Grid.ColumnDefinitions> ... </Grid.ColumnDefinitions> <Grid.RowDefinitions> ... </Grid.RowDefinitions> <TextBlock Text="{Binding NomGamme}" Grid.Column="2" Grid.ColumnSpan="8" FontSize="25" FontWeight="DemiBold" HorizontalAlignment="Center" VerticalAlignment="Center"/> <TextBox Text="{Binding Code, Mode=TwoWay}" Grid.Column="3" Grid.Row="1"/> <TextBlock Text="{Binding NbProduitAchete}" Grid.Column="3" Grid.Row="2" /> <Expander Grid.Row="8" Grid.ColumnSpan="10"> <WrapPanel> <ItemsControl x:Name="itemsControl" ItemsSource="{Binding Produits}"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <WrapPanel/> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ItemsControl.ItemTemplate> <DataTemplate> <Border x:Name="borderVol" Padding="2,2,5,2" Margin="3" BorderThickness="0.5" Background="Transparent" CornerRadius="3"> <Grid> <Grid.ColumnDefinitions> ... </Grid.ColumnDefinitions> <Grid.RowDefinitions> ... </Grid.RowDefinitions> <TextBlock Grid.Column="1" Text="{Binding NomProduit}"/> <ToggleButton Grid.Column="1" Grid.Row="3" Style="{StaticResource TooglButtonEtatAchat}"/> </Grid> </Border> <DataTemplate.Triggers> ... </DataTemplate.Triggers> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </WrapPanel> </Expander> </Grid> </Border> <ControlTemplate.Triggers> ... </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style>
Et enfin le style du ToogleButton présent dans le style ci-dessus
Code xml : 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 <!-- Style ToogleButton--> <Style x:Key="TooglButtonEtatAchat" TargetType="{x:Type ToggleButton}"> <Setter Property="SnapsToDevicePixels" Value="true"/> <Setter Property="OverridesDefaultStyle" Value="true"/> <Setter Property="IsChecked" Value="{Binding EtatAchat}"/> <Setter Property="VerticalAlignment" Value="Center" /> <Setter Property="HorizontalAlignment" Value="Center" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ToggleButton}"> <Image x:Name="imgEtat" Source="../Images/buy_no.png" Width="32" Height="32" ToolTip="Produit non acheté"/> <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Cursor" Value="Hand"/> </Trigger> <DataTrigger Binding="{Binding EtatAchat}" Value="True"> <Setter TargetName="imgEtat" Property="Source" Value="../Images/buy_ok.png"/> <Setter TargetName="imgEtat" Property="ToolTip" Value="Produit acheté"/> </DataTrigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style>
Ceci fait, lors d'un clic sur le ToggleButton, ma propriété EtatAchat est bien mis à jour (true/false).
Je souhaite que la propriété NbProduitAchete de la classe Gamme soit elle aussi mise à jour quand EtatAchat l'est.
En gros :
- Un clic sur ToggleButton =>
- Changement de la valeur de EtatAchat (true/false) =>
- Changement de la valeur de NbProduitAchete qui correspond au nombre de Produit ayant la propriété EtatAchat à true
J'ai pensé à mettre ça dans le set de NbProduitAchete :
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 var query = (from element in Produits where element.EtatAchat == true select element);
Ainsi, j'obtiens bien ce que je veux, or ceci n'est pas effectué au changement de la propriété EtatAchat.
Merci de m'aider ou de m'indiquer une autre façon de faire...
J'espère avoir été clair.
Partager