Question WPF et Data Binding

Plus d'informations
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]

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
Propulsé par Kunena