# encoding: ascii
# api: powershell
# title: Boots DataGrid Binding
# description: Bind DataGrid to an object array using Powerboots
# version: 0.1
# type: module
# author: foureight84
# license: CC0
# function: Export-NamedControl
# x-poshcode-id: 2259
# x-archived: 2015-10-24T23:47:53
# x-published: 2010-09-21T16:14:00
#
# Wpf DataGrid requires .net 4 or wpftoolkit if you haven’t installed.
# Requires Xaml layout from http://poshcode.org/2256; ConvertFrom-Hashtable (older version by Jaykul, although I think v2 works the same) http://poshcode.org/1118; and Export-NamedControl (included) (also written by Jaykul for Boots)
#
#load boots#
Import-Module Powerboots
function Export-NamedControl {
[CmdletBinding()]
param(
[Parameter(ValueFromPipeline=$true, Position=1, Mandatory=$true)]
$Root = $BootsWindow
)
process {
Invoke-BootsWindow $Root {
$control = $BootsWindow
while($control) {
$control = $control | ForEach-Object {
$Element = $_
if(!$Element) { return }
Write-Verbose "This $($Element.GetType().Name) is $Element"
if($Element.Name) {
Write-Verbose "Defining $($Element.Name) = $Element"
Set-Variable "$($Element.Name)" $Element -Scope 2
}
## Return all the child controls ...
@($Element.Children) + @($Element.Child) + @($Element.Content) +
@($Element.Items) + @($Element.Inlines) + @($Element.Blocks)
}
}
}
}
}
function ConvertFrom-Hashtable {
PARAM([HashTable]$hashtable,[switch]$combine)
BEGIN { $output = New-Object PSObject }
PROCESS {
if($_) {
$hashtable = $_;
if(!$combine) {
$output = New-Object PSObject
}
}
$hashtable.GetEnumerator() |
ForEach-Object { Add-Member -inputObject $output `
-memberType NoteProperty -name $_.Name -value $_.Value }
$output
}
}
#--- Boots ---#
$window = New-BootsWindow {} -FileTemplate "[your_path to xaml_file.xaml]" -async -Passthru -On_Loaded {
Export-NamedControl -Root $Args[0]
$data = @{
DeviceGroup = "Samsung"
Device = "SGH-A887"
Platform = "J2ME"
}, @{
DeviceGroup = "Motorola"
Device = "V3i"
Platform = "J2ME"
} | ConvertFrom-Hashtable
$HadesDevices.ItemsSource = $data
}