berduf | Bonjour à tous
Je m'auto forme sur C# et MVVM. Je réalise une application pour tester mes connaissances (elles sont maigres je l'avoue).
Dans cette application je dispose d'un datagrid dans lequel l'utilisateur peut entrer des informations. La validation de l'entrée entraîne, par l'intermédiaire d'un Model "CollectionEntree" l'enregistrement des données dans une base. Ce même Model appelle un autre Model "Calcul" qui effectue la somme des montants de toutes les entrées. Le montant doit enfin apparaître dans un textblock "TextEntree".
Tout fonctionne bien sauf l'affichage de la valeur.
Après avoir mis des points d'arrêt dans mon code je me suis aperçu que mon programme ne repasse pas par le ViewModel après un nouveau calcul et malgré beaucoup de recherches et d'essais, rien à faire ça ne marche pas.
Pourriez vous m'aider sil vous plait.
Merci d'avance.
Je vous fourni les codes de la vue, des deux model et du viewmodel:
La VUE:
Code :
- <Window
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- xmlns:local="clr-namespace:Compte_Bancaire"
- xmlns:ViewModel="clr-namespace:Compte_Bancaire.ViewModel" x:Name="Window" x:Class="Compte_Bancaire.MainWindow"
- mc:Ignorable="d"
-
- Title="COMPTE BANCAIRE" Height="450" Width="800" WindowState="Maximized" FontFamily="Comic Sans MS" WindowStartupLocation="CenterScreen"
- Icon="/Compte Bancaire;component/Images/compte-bancaire.jpg"
- DataContext="{Binding Source={StaticResource ServiceLocator} ,Path=MainViewModel}">
- <Window.Resources>
- <SolidColorBrush x:Key="TextResultat" Color="#FF0D44A6"/>
- </Window.Resources>
- <Grid>
- <TabControl x:Name="TabControlGeneral" Margin="0" Foreground="#FF406097" BorderBrush="{DynamicResource TextColor}" FontStyle="Italic">
- <TabItem x:Name="TabItemFeuilleCompte" Header="FEUILLE DE COMPTE" Foreground="{DynamicResource TextColor}">
- <Grid>
- <Grid.Background>
- <ImageBrush Stretch="UniformToFill" Opacity="0.2" ImageSource="/Compte Bancaire;component/Images/compte-bancaire.jpg"/>
- </Grid.Background>
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="200"/>
- <ColumnDefinition Width="400"/>
- <ColumnDefinition Width="300*"/>
- </Grid.ColumnDefinitions>
- <Grid.RowDefinitions>
- <RowDefinition Height="40"/>
- <RowDefinition Height="*"/>
- <RowDefinition Height="*"/>
- <RowDefinition Height="10"/>
- </Grid.RowDefinitions>
- <StackPanel x:Name="BrdMenu" Grid.RowSpan="3" Grid.Row="1" Background="{DynamicResource FondBarre}">
- <Expander x:Name="ExpandAnnee" Header="ANNEE" Style="{Binding Mode=OneWay, Source={StaticResource ExpanderMenu}}" Foreground="{DynamicResource TextColor}" Margin="5" FontStyle="Italic" FontSize="11" IsExpanded="{Binding ExpandAnnee}" Cursor="Hand">
- <StackPanel>
- <ListBox x:Name="ListAnnee" FontWeight="Normal" Foreground="{DynamicResource TextColor}" Background="{x:Null}" BorderBrush="{x:Null}" Margin="0,0,5,0" Padding="0" ItemsSource="{Binding Annee}" DisplayMemberPath="NomAnnee" SelectedItem="{Binding AnneeSelectionne}" Cursor="Hand" />
- </StackPanel>
- </Expander>
- <Expander x:Name="ExpandMois" Header="MOIS" Style="{Binding Mode=OneWay, Source={StaticResource ExpanderMenu}}" Foreground="{DynamicResource TextColor}" Margin="5,0,5,5" FontSize="11" FontStyle="Italic" Cursor="Hand" IsExpanded="{Binding ExpandMois}" >
- <StackPanel >
- <ListBox x:Name="ListMois" FontWeight="Normal" Foreground="{DynamicResource TextColor}" Background="{x:Null}" BorderBrush="{x:Null}" Margin="0,0,5,0" Padding="0" Cursor="Hand" ItemsSource="{Binding Mois}" DisplayMemberPath="Nom" SelectedItem="{Binding MoisSelectionne}" />
- </StackPanel>
- </Expander>
- <Button x:Name="BtnTransfert" Background="{x:Null}" BorderBrush="{DynamicResource TextColor}" Foreground="{DynamicResource TextColor}" Margin="0,10" Height="30" Width="120" Style="{DynamicResource ButtonStyle1}" Cursor="Hand" FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Center">
- <StackPanel Orientation="Horizontal">
- <Image Width="25" Height="25" HorizontalAlignment="Center" Margin="0,0,5,0" Stretch="UniformToFill" VerticalAlignment="Center" Source="/Compte Bancaire;component/Images/Tranfert.ico" ></Image>
- <Label Foreground="{DynamicResource TextColor}" Content="Transfert" HorizontalAlignment="Center" VerticalAlignment="Center" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" ></Label>
- </StackPanel>
- </Button>
- <GroupBox x:Name="GroupResultat" Margin="5" Header="OPERATIONS" BorderThickness="1" SnapsToDevicePixels="True" ClipToBounds="True" BorderBrush="{DynamicResource TextColor}">
- <StackPanel x:Name="StackResultats">
- <GroupBox x:Name="GroupReliquat" Header="{Binding TitreReliquat}" Margin="5,5,5,0" Foreground="{DynamicResource TextResultat}" BorderBrush="{DynamicResource TextColor}" BorderThickness="2">
- <GroupBox.Background>
- <SolidColorBrush Color="#FF20B608" Opacity="0.15"/>
- </GroupBox.Background>
- <TextBlock x:Name="TextReliquat" FontSize="16" Margin="5,10" Text="1000" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="{DynamicResource TextValeurPositive}" FontStyle="Italic" FontWeight="Bold"/>
- </GroupBox>
- <GroupBox x:Name="GroupEntree" FontSize="11" Header="Total des entrées" Margin="5,10,5,0" Foreground="{DynamicResource TextColor}" BorderBrush="{DynamicResource TextColor}" >
- <TextBlock x:Name="TextEntree" FontSize="14" Margin="5,10" Text="{Binding ResultatEntree/SumEntree, StringFormat=0.00;#}" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="{DynamicResource TextColor}" FontStyle="Italic" Background="{x:Null}" >
- <TextBlock.DataContext>
- <ViewModel:MainViewModel/>
- </TextBlock.DataContext>
- </TextBlock>
- </GroupBox>
- <GroupBox x:Name="GroupMensualisation" FontSize="11" Header="Total des mensualisations" Margin="5,5,5,0" BorderBrush="{DynamicResource TextColor}" >
- <TextBlock x:Name="TextMensualisation" FontSize="14" Margin="5,10" Text="1000" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="{DynamicResource TextColor}" FontStyle="Italic"/>
- </GroupBox>
- <GroupBox x:Name="GroupDepense" FontSize="11" Header="Total des dépenses" Margin="5,5,5,0" BorderBrush="{DynamicResource TextColor}" >
- <TextBlock x:Name="TextDepense" FontSize="14" Margin="5,10" Text="1000" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="{DynamicResource TextColor}" FontStyle="Italic"/>
- </GroupBox>
- <GroupBox x:Name="GroupReste" Header="{Binding TitreSolde}" Margin="5,10,5,0" Foreground="{DynamicResource TextResultat}" BorderBrush="{DynamicResource TextColor}" BorderThickness="3" FontWeight="Bold" >
- <GroupBox.Background>
- <SolidColorBrush Color="#FFF7210B" Opacity="0.15"/>
- </GroupBox.Background>
- <TextBlock x:Name="TextSolde" FontSize="20" Margin="5,10" Text="-25" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="{DynamicResource TextValeurNegative}" FontStyle="Italic" FontWeight="Bold"/>
- </GroupBox>
- </StackPanel>
- </GroupBox>
- </StackPanel>
- <Border x:Name="BrdIconeTitre" >
- <Border.Background>
- <SolidColorBrush Color="#FFA6BCCF" Opacity="0.8"/>
- </Border.Background>
- <Image Width="40" Height="40" Margin="5,0,20,0" Source="/Compte Bancaire;component/Images/FeuilleCompte.png"/>
- </Border>
- <Border x:Name="BrdTitre" Grid.Column="1" Grid.ColumnSpan="3" >
- <Border.Background>
- <SolidColorBrush Color="#FFA6BCCF" Opacity="0.8"/>
- </Border.Background>
- <Label x:Name="LabTitre" Foreground="{DynamicResource TextColor}" Margin="5,0" FontSize="20" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontWeight="Bold" IsEnabled="False" Content="{Binding TitrePage}"/>
- </Border>
- <Border x:Name="BrdEntree" Grid.Row="1" Grid.Column="1" >
- <Border.Background>
- <SolidColorBrush Color="#FFA6BCCF" Opacity="0.2"/>
- </Border.Background>
- <ContentControl x:Name="ContentEntree" Content="{Binding FeuilleEntree}"/>
- </Border>
- <Border x:Name="BrdMensualisation" Grid.Row="2" Grid.Column="1">
- <Border.Background>
- <SolidColorBrush Color="#FFA6BCCF" Opacity="0.2"/>
- </Border.Background>
- <ContentControl x:Name="ContentMensualisation" Content="{Binding FeuilleMensualisation}" />
- </Border>
- <Border x:Name="BrdDepense" Grid.Row="1" Grid.Column="2" Grid.RowSpan="2">
- <Border.Background>
- <SolidColorBrush Color="#FFA6BCCF" Opacity="0.2"/>
- </Border.Background>
- <ContentControl x:Name="ContentDepense" Content="{Binding FeuilleDepense}" />
- </Border>
- </Grid>
- </TabItem>
- <TabItem x:Name="TabItemCheque" Header="CHEQUES" Foreground="{DynamicResource TextColor}">
- <Grid>
- <Grid.Background>
- <ImageBrush Opacity="0.3" Stretch="UniformToFill" ImageSource="/Compte Bancaire;component/Images/cheque3.jpg"/>
- </Grid.Background>
- </Grid>
- </TabItem>
- </TabControl>
- </Grid>
- </Window>
|
MODEL "CollectionEntree":
le MODEL "Calcul":
Code :
- using System.ComponentModel;
- using System.Linq;
- namespace Compte_Bancaire.Models
- {
- public class Calcul : INotifyPropertyChanged
- {
- public event PropertyChangedEventHandler PropertyChanged;
- public Calcul()
- {
- GetTotalEntree();
- }
- #region Propriétés
- private decimal sumEntree = 0;
- public decimal SumEntree
- {
- set
- {
- if (sumEntree != value)
- {
- sumEntree = value;
- if (PropertyChanged != null)
- {
- OnPropertyChanged("SumEntree" );
- }
- }
- }
- get
- {
- return sumEntree;
- }
- }
- #endregion
- #region Méthodes pour les différents calculs
- public void GetTotalEntree()
- {
- BddContext Bdd = new BddContext("BddOperationMensuelle.mdf" );
- SumEntree = Bdd.Entrees.Select(c => c.Credit).Sum();
- }
- protected virtual void OnPropertyChanged(string propertyName)
- {
- PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
- }
- #endregion
- }
- }
|
et enfin le VIEWMODEL:
|