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

VB.NET Discussion :

[WPF] Update du SelectedItem d'un ListView avec Converter


Sujet :

VB.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 158
    Points : 41
    Points
    41
    Par défaut [WPF] Update du SelectedItem d'un ListView avec Converter
    Bonjour,

    Dans l'exemple suivant, un ListView, 1 TextBox liés à la valeur 'Name' de l'élément sélectionnée, 1 autre TextBox lié à la valeur 'Picture'...et un bouton.
    Le bouton, une fois pressé efface la valeur 'Picture' de l'élément sélectionné.

    Nom : Untitled-1.png
Affichages : 537
Taille : 5,7 Ko

    Je remarque bien que pour le 'Name', une édition dans le champ texte du nom est impactée immédiatement dans le ListView
    Pourquoi, svp, quand le bouton d'effacement est pressé, ce n'est pas impacté directement ET dans le ListView ET dans le champ texte correspondant!?

    Comment dois-je m'y prendre?

    Merci d'avance pour l'aide que vous voudrez bien m'accorder!!

    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
     
    <Window x:Class="MainWindow"
        xmlns:local="clr-namespace:WpfApplication1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
     
        <Grid>
            <Grid.Resources>
                <local:checkImageURL x:Key="checkImage"/>
            </Grid.Resources>
            <ListView Height="230" HorizontalAlignment="Left" Margin="12,12,0,0" Name="PersonListView" VerticalAlignment="Top" Width="445">
                <ListView.View>
                    <GridView >
                        <GridViewColumn DisplayMemberBinding="{Binding Id}" Width="80">
                            <GridViewColumnHeader>Id</GridViewColumnHeader>
                        </GridViewColumn>
                        <GridViewColumn DisplayMemberBinding="{Binding Name}" Width="100">
                            <GridViewColumnHeader>Name</GridViewColumnHeader>
                        </GridViewColumn>
                        <GridViewColumn Width="100">
                            <GridViewColumnHeader>Picture</GridViewColumnHeader>
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBox Text="{Binding Path=Picture, Converter={StaticResource checkImage}}" />
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                    </GridView>
                </ListView.View>
            </ListView>
            <TextBox DataContext="{Binding SelectedItem, ElementName=PersonListView}" Text="{Binding Path=Name, UpdateSourceTrigger =PropertyChanged}" Height="23" HorizontalAlignment="Left" Margin="12,261,0,0" Name="TextBlock1" VerticalAlignment="Top" Width="121" />
            <TextBox DataContext="{Binding SelectedItem, ElementName=PersonListView}" Text="{Binding Path=Picture, UpdateSourceTrigger=PropertyChanged}" Height="23" HorizontalAlignment="Left" Margin="218,258,0,0" Name="TextBox1"  VerticalAlignment="Top" Width="121" />
            <Button Content="Effacer image" Height="23" HorizontalAlignment="Right" Margin="0,258,46,0" Name="Button1" VerticalAlignment="Top" Width="112" />
        </Grid>
    </Window>
    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
     
    Imports System.Collections.ObjectModel
    Imports System.ComponentModel
     
    Class MainWindow
        Private Sub MainWindow_Loaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles Me.Loaded
            Dim personList As New List(Of Person)()
            personList.Add(New Person() With {.Id = 1, .Name = "Alain", .Picture = "Photo d'Alain"})
            personList.Add(New Person() With {.Id = 2, .Name = "Pierre", .Picture = "Photo de Pierre"})
            personList.Add(New Person() With {.Id = 3, .Name = "Marc", .Picture = "Photo de Marc"})
            PersonListView.ItemsSource = personList
        End Sub
     
        Private Sub Button1_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button1.Click
            Dim p As Person = TryCast(PersonListView.SelectedItem, Person)
            p.Picture = ""
        End Sub
    End Class
    Public Class checkImageURL
        Implements IValueConverter
        Public Function Convert(ByVal value As Object, ByVal targetType As Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.Convert
            If value = "" Then
                Return "☺"
            Else
                Return "☻"
            End If
            Return Nothing
        End Function
        Public Function ConvertBack(ByVal value As Object, ByVal targetType As Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
            Return Nothing
        End Function
    End Class
    Public Class Person
        Public Property Id() As Int32
            Get
                Return m_Id
            End Get
            Set(value As Int32)
                m_Id = Value
            End Set
        End Property
        Private m_Id As Int32
        Public Property Name() As String
            Get
                Return m_Name
            End Get
            Set(value As String)
                m_Name = Value
            End Set
        End Property
        Private m_Name As String
        Public Property Picture() As String
            Get
                Return m_Picture
            End Get
            Set(value As String)
                m_Picture = value
            End Set
        End Property
        Private m_Picture As String
    End Class

  2. #2
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour
    Ton class Person souffre d'un defaut ...Il n'implement pas l'interface INotifyPropertyChanged qui est dans les canons du MVVM....cet interface est charge de notifier le changement da valeur de propriete du model (person vers les controls)....et tu as modifie la prop du model et non une prop de control(les controls communiquent entre sans passer par le model
    Code .vb

    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
     
    Public Class Person
        Implements INotifyPropertyChanged
     
        Public Property Id() As Int32
            Get
                Return m_Id
            End Get
            Set(ByVal value As Int32)
                m_Id = value
                RaisePropertyChanged("Id")
            End Set
        End Property
        ' idem pour les autres props ....
     
        Public Event PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
     
        Private Sub RaisePropertyChanged(ByVal propName As String)
            RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName))
        End Sub
     
    End Class
    bon code...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 158
    Points : 41
    Points
    41
    Par défaut
    Un tout grand merci MABROUKI, j'ai pigé et cela marche tout de suite mieux!! Merci!!

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

Discussions similaires

  1. WPF style par defaut ListView avec GridView dans generic.xaml
    Par Nikita0511 dans le forum Windows Presentation Foundation
    Réponses: 0
    Dernier message: 17/09/2013, 17h46
  2. [WPF] ListView avec "AllowUserToAddRows"
    Par fmadore dans le forum C#
    Réponses: 0
    Dernier message: 04/06/2009, 16h07
  3. WPF ListView avec Checkbox, trouver l'item qui a été Checked
    Par fmadore dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 09/12/2008, 17h21
  4. [WPF] ListView avec colonnes et boutons
    Par Chris_LaFouine dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 30/05/2008, 16h16
  5. Remplir une ListView avec une BD
    Par manikou dans le forum MFC
    Réponses: 1
    Dernier message: 17/05/2005, 09h48

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