Question
WPF et Data Binding
- Jean Filleau
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 1
- Remerciements reçus 0
il y a 11 ans 9 mois #17634
par Jean Filleau
WPF et Data Binding a été créé par Jean Filleau
Bonjour,
J'ai un script avec GUI (WPF) qui permet de déverrouiller un lecteur, puis de lancer une application qui stocke ids et mots de passe, et de la réduire dans la barre des tâches. Le tout en renseignant un mot de passe et en cliquant sur un bouton.
Chaque étape génère un message que j'affiche dans une listbox. Je voudrais que les messages s'affichent en temps réel, plutôt qu'en une seule fois, à la fin. Question de Data Binding que je ne sais pas par quel bout prendre (dans xaml ? dans le script ps lui-même ?)... Merci de vos pistes !
Voici non pas le script lui-même, mais un petit script qui s'en tient au problème.
[code:1]
Add-Type -AssemblyName PresentationFramework
Add-Type -AssemblyName PresentationCore
Add-Type -AssemblyName WindowsBase
[xml]$xaml = @'
<Window
xmlns=\"schemas.microsoft.com/winfx/2006/xaml/presentation\"
xmlns:«»x=\"schemas.microsoft.com/winfx/2006/xaml\"
Name=\"Window\" Height=\"364\" Width=\"608\" Title=\"Essai de Data Binding\">
<Grid>
<ListBox
Name=\"listBox1\"
Height=\"250\" HorizontalAlignment=\"Left\" Margin=\"32,39,0,0\"
VerticalAlignment=\"Top\" Width=\"426\"
ItemsSource=\"{Binding}\">
</ListBox>
<Button Content=\"Cliquer\"
Height=\"44\" HorizontalAlignment=\"Left\" Margin=\"480,245,0,0\" Name=\"button1\"
VerticalAlignment=\"Top\" Width=\"75\">
</Button>
</Grid>
</Window>
'@
$reader = New-Object System.Xml.XmlNodeReader $xaml
$Window = [Windows.Markup.XamlReader]::Load($reader)
# Connexion aux contrôles
[System.Windows.Controls.ContentControl]$ListBoxWindow = $Window.FindName('Window')
[System.Windows.Controls.Primitives.Selector ]$ListBox = $Window.FindName('listBox1')
[System.Windows.Controls.Button]$btnCliquer = $Window.FindName(\"button1\"«»)
# Initialisation d'un tableau avec les messages
$messages = @()
$messages+= 'Message 1...'
$messages+= 'Message 2...'
$messages+= 'Message 3...'
$messages+= 'Message 4...'
$messages+= 'Message 5...'
$messages+= 'Message 6...'
# Pour le Data Binding :
# Source : une liste de données dynamiques de type string (les messages)
$Liste = New-Object System.Collections.ObjectModel.ObservableCollection[string]
# Cible : la ListBox, propriété ItemsSource
$ListBox.ItemsSource = $Liste
$btnCliquer.Add_Click({
Register-ObjectEvent -InputObject $Liste -EventName CollectionChanged -Action {
Write-Host \"$($EventArgs.NewItems)\"
} | Out-Null
$msg = $messages[0]
$Liste.Add($msg)
Start-Sleep -Milliseconds 500
$msg = $messages[1]
$Liste.Add($msg)
Start-Sleep -Milliseconds 500
$msg = $messages[2]
$Liste.Add($msg)
Start-Sleep -Milliseconds 500
$msg = $messages[3]
$Liste.Add($msg)
Start-Sleep -Milliseconds 500
$msg = $messages[4]
$Liste.Add($msg)
Start-Sleep -Milliseconds 500
$msg = $messages[5]
$Liste.Add($msg)
Start-Sleep -Milliseconds 500
})
Get-EventSubscriber | Unregister-Event
$Window.ShowDialog() | Out-Null[/code:1]
Message édité par: Jean F., à: 15/06/14 21:18
Message édité par: Jean F., à: 15/06/14 21:20
Message édité par: Jean F., à: 15/06/14 21:20
Message édité par: Jean F., à: 15/06/14 21:21<br><br>Message édité par: Jean F., à: 17/06/14 07:51
J'ai un script avec GUI (WPF) qui permet de déverrouiller un lecteur, puis de lancer une application qui stocke ids et mots de passe, et de la réduire dans la barre des tâches. Le tout en renseignant un mot de passe et en cliquant sur un bouton.
Chaque étape génère un message que j'affiche dans une listbox. Je voudrais que les messages s'affichent en temps réel, plutôt qu'en une seule fois, à la fin. Question de Data Binding que je ne sais pas par quel bout prendre (dans xaml ? dans le script ps lui-même ?)... Merci de vos pistes !
Voici non pas le script lui-même, mais un petit script qui s'en tient au problème.
[code:1]
Add-Type -AssemblyName PresentationFramework
Add-Type -AssemblyName PresentationCore
Add-Type -AssemblyName WindowsBase
[xml]$xaml = @'
<Window
xmlns=\"schemas.microsoft.com/winfx/2006/xaml/presentation\"
xmlns:«»x=\"schemas.microsoft.com/winfx/2006/xaml\"
Name=\"Window\" Height=\"364\" Width=\"608\" Title=\"Essai de Data Binding\">
<Grid>
<ListBox
Name=\"listBox1\"
Height=\"250\" HorizontalAlignment=\"Left\" Margin=\"32,39,0,0\"
VerticalAlignment=\"Top\" Width=\"426\"
ItemsSource=\"{Binding}\">
</ListBox>
<Button Content=\"Cliquer\"
Height=\"44\" HorizontalAlignment=\"Left\" Margin=\"480,245,0,0\" Name=\"button1\"
VerticalAlignment=\"Top\" Width=\"75\">
</Button>
</Grid>
</Window>
'@
$reader = New-Object System.Xml.XmlNodeReader $xaml
$Window = [Windows.Markup.XamlReader]::Load($reader)
# Connexion aux contrôles
[System.Windows.Controls.ContentControl]$ListBoxWindow = $Window.FindName('Window')
[System.Windows.Controls.Primitives.Selector ]$ListBox = $Window.FindName('listBox1')
[System.Windows.Controls.Button]$btnCliquer = $Window.FindName(\"button1\"«»)
# Initialisation d'un tableau avec les messages
$messages = @()
$messages+= 'Message 1...'
$messages+= 'Message 2...'
$messages+= 'Message 3...'
$messages+= 'Message 4...'
$messages+= 'Message 5...'
$messages+= 'Message 6...'
# Pour le Data Binding :
# Source : une liste de données dynamiques de type string (les messages)
$Liste = New-Object System.Collections.ObjectModel.ObservableCollection[string]
# Cible : la ListBox, propriété ItemsSource
$ListBox.ItemsSource = $Liste
$btnCliquer.Add_Click({
Register-ObjectEvent -InputObject $Liste -EventName CollectionChanged -Action {
Write-Host \"$($EventArgs.NewItems)\"
} | Out-Null
$msg = $messages[0]
$Liste.Add($msg)
Start-Sleep -Milliseconds 500
$msg = $messages[1]
$Liste.Add($msg)
Start-Sleep -Milliseconds 500
$msg = $messages[2]
$Liste.Add($msg)
Start-Sleep -Milliseconds 500
$msg = $messages[3]
$Liste.Add($msg)
Start-Sleep -Milliseconds 500
$msg = $messages[4]
$Liste.Add($msg)
Start-Sleep -Milliseconds 500
$msg = $messages[5]
$Liste.Add($msg)
Start-Sleep -Milliseconds 500
})
Get-EventSubscriber | Unregister-Event
$Window.ShowDialog() | Out-Null[/code:1]
La pièce jointe EssaiDataBinding.ps1 est absente ou indisponible
Message édité par: Jean F., à: 15/06/14 21:18
Message édité par: Jean F., à: 15/06/14 21:20
Message édité par: Jean F., à: 15/06/14 21:20
Message édité par: Jean F., à: 15/06/14 21:21<br><br>Message édité par: Jean F., à: 17/06/14 07:51
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.039 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- WPF et Data Binding