• 20 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

Ce cours est en vidéo.

Vous pouvez obtenir un certificat de réussite à l'issue de ce cours.

J'ai tout compris !

Mis à jour le 29/06/2017

Manipulez les données exposées par le service WCF depuis une application cliente

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Téléchargez le fichier d'audiodescription : Partie 4, Chapitre 5
Vous trouverez sous la vidéo les codes source du cours.

Code Source

RelayCommand.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace System.Windows.Input
{
    public class RelayCommand<T> : ICommand
    {
        #region Fields

        private readonly Action<T> _execute = null;
        private readonly Predicate<T> _canExecute = null;

        #endregion

        #region Constructors

        /// <summary>
        /// Creates a new command that can always execute.
        /// </summary>
        /// <param name="execute">The execution logic.</param>
        public RelayCommand(Action<T> execute)
            : this(execute, null)
        {
        }

        /// <summary>
        /// Creates a new command with conditional execution.
        /// </summary>
        /// <param name="execute">The execution logic.</param>
        /// <param name="canExecute">The execution status logic.</param>
        public RelayCommand(Action<T> execute, Predicate<T> canExecute)
        {
            if (execute == null)
                throw new ArgumentNullException("execute");

            _execute = execute;
            _canExecute = canExecute;
        }

        #endregion

        #region ICommand Members

        public bool CanExecute(object parameter)
        {
            return _canExecute == null ? true : _canExecute((T)parameter);
        }

        public event EventHandler CanExecuteChanged
        {
            add
            {
                if (_canExecute != null)
                    CommandManager.RequerySuggested += value;
            }
            remove
            {
                if (_canExecute != null)
                    CommandManager.RequerySuggested -= value;
            }
        }

        public void Execute(object parameter)
        {
            _execute((T)parameter);
        }

        #endregion
    }
}

FichesClientsVM.cs

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using GestionFichesClients.FichesClientsService;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows.Input;

namespace GestionFichesClients
{
    class FichesClientsVM : INotifyPropertyChanged
    {
        private FichesClientsService.FicheClient ficheSelectionnee;

        private ObservableCollection<FichesClientsService.FicheClient> listeDeFichesClients;

        public ObservableCollection<FicheClient> ListeDeFichesClients
        {
            get
            {
                return listeDeFichesClients;
            }

            private set
            {
                if (listeDeFichesClients != value)
                {
                    listeDeFichesClients = value;
                    NotifyPropertyChanged();
                }
            }
        }

        public FicheClient FicheSelectionnee
        {
            get
            {
                return ficheSelectionnee;
            }

            set
            {
                if (ficheSelectionnee != value)
                {
                    ficheSelectionnee = value;
                    NotifyPropertyChanged();
                }
            }
        }

        ICommand ajouterFicheClient;
        public ICommand AjouterFicheClient
        {
            get
            {
                if (ajouterFicheClient == null)
                {
                    ajouterFicheClient = new RelayCommand<object>((obj) =>
                    {
                        var client = new FichesClientsService.FichesClientServiceClient();
                        client.AjoutFicheClient();
                        ListeDeFichesClients = new ObservableCollection<FicheClient>(client.GetFiches());
                        client.Close();
                    });
                }
                return ajouterFicheClient;
            }
        }

        ICommand supprimerFicheClient;
        public ICommand SupprimerFicheClient
        {
            get
            {
                if (supprimerFicheClient == null)
                {
                    supprimerFicheClient = new RelayCommand<FicheClient>((fiche) =>
                    {
                        var client = new FichesClientsService.FichesClientServiceClient();
                        client.SuppressionFicheClient(fiche);
                        ListeDeFichesClients = new ObservableCollection<FicheClient>(client.GetFiches());
                        client.Close();
                    });
                }
                return supprimerFicheClient;
            }
        }

        ICommand modifierFicheClient;
        public ICommand ModifierFicheClient
        {
            get
            {
                if (modifierFicheClient == null)
                {
                    modifierFicheClient = new RelayCommand<FicheClient>((fiche) =>
                    {
                        var client = new FichesClientsService.FichesClientServiceClient();
                        client.ModificationFicheClient(fiche);
                        ListeDeFichesClients = new ObservableCollection<FicheClient>(client.GetFiches());
                        client.Close();
                    });
                }
                return modifierFicheClient;
            }
        }

        ICommand editerFicheClient;
        public ICommand EditerFicheClient
        {
            get
            {
                if (editerFicheClient == null)
                {
                    editerFicheClient = new RelayCommand<FicheClient>((fiche) =>
                    {
                        FicheSelectionnee = fiche;
                    });
                }
                return editerFicheClient;
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        public void NotifyPropertyChanged([CallerMemberName] string str="")
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(str));
        }

        public FichesClientsVM()
        {
            var client = new FichesClientsService.FichesClientServiceClient();
            ListeDeFichesClients = new ObservableCollection<FicheClient>(client.GetFiches());
            client.Close();
        }
    }
}

MainWindow.xaml

<Window x:Class="GestionFichesClients.MainWindow"
        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:GestionFichesClients"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Window.DataContext>
        <local:FichesClientsVM></local:FichesClientsVM>
    </Window.DataContext>
    <Grid>
        <Grid.Resources>
            <Style TargetType="Label">
                <Setter Property="HorizontalAlignment" Value="Center">
                </Setter>
                <Setter Property="VerticalAlignment" Value="Center">
                </Setter>
            </Style>
            <Style TargetType="TextBox">
                <Setter Property="HorizontalAlignment" Value="Stretch">
                </Setter>
                <Setter Property="VerticalAlignment" Value="Center">
                </Setter>
                <Setter Property="TextAlignment" Value="Center">
                </Setter>
            </Style>
        </Grid.Resources>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
            <ColumnDefinition Width="5"/>
            <ColumnDefinition/>
            <ColumnDefinition/>
            <ColumnDefinition Width="5"/>
            <ColumnDefinition Width="2*"/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Label Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="5" HorizontalAlignment="Center" VerticalAlignment="Center">Fiche Client</Label>
        <Label Grid.Row="1" Grid.Column="0">Nom :</Label>
        <Label Grid.Row="2" Grid.Column="0">Prénom :</Label>
        <Label Grid.Row="3" Grid.Column="0">Âge :</Label>
        <Label Grid.Row="4" Grid.Column="0">Sexe :</Label>
        <Label Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="4" Content="{Binding FicheSelectionnee.Nom}"></Label>
        <Label Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="4" Content="{Binding FicheSelectionnee.Prenom}"></Label>
        <TextBox Grid.Row="3" Grid.Column="3" Text="{Binding FicheSelectionnee.Age, Mode=TwoWay}"></TextBox>
        <TextBox Grid.Row="4" Grid.Column="3" Text="{Binding FicheSelectionnee.Sexe, Mode=TwoWay}"></TextBox>
        <Button Command="{Binding ModifierFicheClient}" CommandParameter="{Binding FicheSelectionnee}" Grid.ColumnSpan="5" Grid.Row="5">Appliquer les modifications</Button>
        <Rectangle Grid.Column="5" Grid.RowSpan="6" Fill="Black"></Rectangle>
        <Label Grid.Column="6" Grid.Row="0" Grid.ColumnSpan="2">Fiches Clients</Label>
        <ListBox x:Name="listeDeFichesClients" Grid.Column="6" Grid.RowSpan="5" Grid.Row="1" ItemsSource="{Binding ListeDeFichesClients}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <Label Content="- "></Label>
                        <Label Content="{Binding Nom}"></Label>
                        <Label Content="{Binding Prenom}"></Label>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
        <Button Grid.Column="7" Grid.Row="1" Command="{Binding AjouterFicheClient}">Ajouter</Button>
        <Button Grid.Column="7" Grid.Row="2" Command="{Binding SupprimerFicheClient}" CommandParameter="{Binding ElementName=listeDeFichesClients, Path=SelectedItem}">Retirer</Button>
        <Button Grid.Column="7" Grid.Row="3" Command="{Binding EditerFicheClient}" CommandParameter="{Binding ElementName=listeDeFichesClients, Path=SelectedItem}">Editer</Button>
    </Grid>
</Window>

MainWindow.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace GestionFichesClients
{
    /// <summary>
    /// Logique d'interaction pour MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}
Exemple de certificat de réussite
Exemple de certificat de réussite