IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

Multi Value Converter


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 17
    Par défaut Multi Value Converter
    Bonjour à tous,

    J'ai un problème avec la mise en place d'un multiconverter. Dans ma liste, j'essaye de convertir les données d'une colonne, soit en image, soit en texte, en fonction de 2 colonnes.

    Si dans ma première colonne j'ai une donnée (date) je dois l'afficher sinon je regarde la valeur d'une autre colonne et je dois afficher une image dans la première colonne pour montrer l'état.

    Le converter me renvoie les bonnes infos mais je n'arrive pas à l'utiliser.

    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
     
            public object Convert(object[] value, Type targetType, object parameter, CultureInfo culture)
            {
                if (value[0] == null && value[1] != null)
                {
                    DateTime dt = (DateTime)value[1];
                    DateTime s = DateTime.Today.AddDays(-15);
                    DateTime t = DateTime.Today.AddDays(15);
     
                    BitmapImage bi = new BitmapImage();
                    bi.BeginInit();
     
                    if (DateTime.Today >= dt && dt > s)
                    {
                        bi.UriSource = new Uri("pastille_orange.jpg");
                        bi.EndInit();
                        return bi;
                    }
                    else if (DateTime.Today > dt)
                    {
                        bi.UriSource = new Uri("pastille_rouge.jpg");
                        bi.EndInit();
                        return bi;
                    }
                    else if (dt > t)
                    {
                        bi.UriSource = new Uri("pastille_verte.jpg");
                        bi.EndInit();
                        return bi;
                    }
                }
                if(value[0] != null)
                    return value[0];
                return null;
            }
    Ensuite c'est là que je coince, j'étais parti sur quelque chose comme ça mais comment afficher la date quand il y en a une.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
                ImageConverter image = new ImageConverter();
        MultiBinding mb = new MultiBinding();
                    mb.Bindings.Add(bd1);
                    mb.Bindings.Add(bd2);
                    mb.Converter = image;
     
     
                    FrameworkElementFactory fe = new FrameworkElementFactory(typeof(Image));
                    fe.SetValue(Image.SourceProperty, mb);
    Quelqu'un a déjà rencontré ce problème ?

    Merci d'avance.

  2. #2
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    Code xaml : 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
    <Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    		xmlns:src="clr-namespace:WpfApplication1"
    		xmlns:clr="clr-namespace:System;assembly=mscorlib"
            Title="MainWindow" Height="350" Width="525">
    	<Window.Resources>
    		<src:MyConverter x:Key="myConverter"/>
    	</Window.Resources>
        <Grid>
    		<ListView ItemsSource="{Binding}">
    			<ListView.View>
    				<GridView>
    					<GridView.Columns>
    						<GridViewColumn>
    							<GridViewColumn.CellTemplate>
    								<DataTemplate>
    									<ContentControl Content="{Binding Converter={StaticResource myConverter}}">
    										<ContentControl.Resources>
    											<DataTemplate DataType="{x:Type clr:DateTime}">
    												<TextBlock Text="C'est une Date"/>
    											</DataTemplate>
    											<DataTemplate DataType="{x:Type clr:String}">
    												<TextBox Text="{Binding Path=.}"/>
    											</DataTemplate>
    										</ContentControl.Resources>
    									</ContentControl>
    								</DataTemplate>
    							</GridViewColumn.CellTemplate>
    						</GridViewColumn>
    					</GridView.Columns>
    				</GridView>
    			</ListView.View>
    		</ListView>
    	</Grid>
    </Window>
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class MyConverter : IValueConverter
    {
    	public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    	{
    		POCO poco = (POCO)value;
    		return (object)poco.Date ?? poco.Text;
    	}

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 17
    Par défaut
    Ah merci pour la réponse, ça m'a bien aidé.

    J'ai maintenant la date qui s'affiche dans la colonne si j'ai une date sinon j'affiche bien l'image que je veux en fonction de l'autre colonne.

    Voici le code si ça peut aider.

    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
     
    public DataTemplate initCellTemplateImage()
            {
                DataTemplate dt = new DataTemplate();
                ImageConverter image = new ImageConverter();
     
                    MultiBinding mb = new MultiBinding();
                    mb.Bindings.Add(bd1);
                    mb.Bindings.Add(bd2);
                    mb.Converter = image;
     
                    FrameworkElementFactory te = new FrameworkElementFactory(typeof(ContentControl));
                    te.SetValue(ContentControl.ContentProperty, mb);
     
                    dt.VisualTree = te;
                return dt;
    }
    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
     
    public object Convert(object[] value, Type targetType, object parameter, CultureInfo culture)
            {
                if (value[0] == null && value[1] != null)
                {
                    DateTime dt = (DateTime)value[1];
                    DateTime s = DateTime.Today.AddDays(-15);
                    DateTime t = DateTime.Today.AddDays(15);
     
                    BitmapImage bi = new BitmapImage();
                    bi.BeginInit();
                    System.Windows.Controls.Image resImage = new System.Windows.Controls.Image();
     
                    if (DateTime.Today >= dt && dt > s)
                    {
                        bi.UriSource = new Uri("pastille_orange.jpg");
                        bi.EndInit();
                        resImage.SetValue(System.Windows.Controls.Image.SourceProperty, bi);
                        return resImage;
                    }
                    else if (DateTime.Today > dt)
                    {
                        bi.UriSource = new Uri("pastille_rouge.jpg");
                        bi.EndInit();
                        resImage.SetValue(System.Windows.Controls.Image.SourceProperty, bi);
                        return resImage;
                    }
                    else if (dt > t)
                    {
                        bi.UriSource = new Uri("pastille_verte.jpg");
                        bi.EndInit();
                        resImage.SetValue(System.Windows.Controls.Image.SourceProperty, bi);
                        return resImage;
                    }
                }
                else if(value[0] != null)
                    return value[0];
                return null;
            }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 27/07/2010, 14h30
  2. Ajouter à une liste déroulante multi-valuée
    Par Jonkill dans le forum VBA Access
    Réponses: 7
    Dernier message: 31/08/2008, 20h17
  3. Réponses: 16
    Dernier message: 23/05/2008, 09h04
  4. [SSRS][2k5] parameter multi-value
    Par ahmedz dans le forum SSRS
    Réponses: 2
    Dernier message: 07/05/2008, 11h13
  5. Réponses: 2
    Dernier message: 16/01/2008, 16h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo