简体   繁体   中英

PowerShell and XAML data binding

I'm trying to get a list of users searching by a surname property and list them in the ListView.

Here's XAML code:

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
Title="Find users with SamAccountName"
Width="525"
Background="#FF262626"
ResizeMode="NoResize"
SizeToContent="Height">


<StackPanel Margin="5,5,5,5" Orientation="Vertical">


    <Grid
        Name="Grid"
        Width="400"
        Height="200"
        Background="#313130">
        <Label
            Name="Label"
            Content="Select employee"
            FontSize="12"
            Foreground="White" />
        <ListView
            Name="ListView"
            Margin="0,25,0,0"
            Background="Transparent"
            BorderBrush="Transparent"
            Foreground="White"
            IsHitTestVisible="False"
            SelectionMode="Single">
            <ListView.View>
                <GridView>
                    <GridViewColumn
                        Width="100"
                        DisplayMemberBinding="{Binding Path=Logon}"
                        Header="Logon" />
                    <GridViewColumn
                        Width="150"
                        DisplayMemberBinding="{Binding Path=FirstName}"
                        Header="First name" />
                    <GridViewColumn
                        Width="150"
                        DisplayMemberBinding="{Binding Path=LastName}"
                        Header="Last name" />
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>

    <StackPanel HorizontalAlignment="Right">
        <Button Width="50" Content="SAVE" />
    </StackPanel>

</StackPanel>

And it looks like this: XAML look

I believe I cannot do it without data-binding and I saw a lot of posts about them but I couldn't understand it completely.

For now in powershell I have:

Add-Type -AssemblyName PresentationFramework

$employees = Get-ADUser -Filter {Surname -like "surname"}

$itemSource = @()

ForEach ($employee in ($employees | Sort-Object SamAccountName)) {

$itemSource += [PSCustomObject]@ {

    Logon = $employee.Name
    FirstName = $employee.GivenName
    LastName = $employee.Surname

}

$columnOrder = 'Logon', 'FirstName', 'LastName'

[XML]$Form = Get-Content "xmlPath"

$NR = (New-Object System.Xml.XmlNodeReader $Form)
$Win = [Windows.Markup.XamlReader]::Load($NR)

$Win.ShowDialog()

Now, the ForEach is working perfectly fine and returning exactly what I need but cannot find any way to put it into ViewList.

Then I'll need to save the selected user into a variable that I'll display later in the textbox.

Sorry if it's a stupid/easy question but I just started learning PowerShell to help me automate my work.

In the loaded form, you have to specify the ListView's ItemsSource

in PowerShell, you can do it like this

Add-Type -AssemblyName PresentationFramework
$employees = Get-ADUser -Filter {Surname -like "surname"}

$itemSource = @()

ForEach ($employee in $($employees | Sort-Object SamAccountName)) {

    $itemSource += [PSCustomObject]@{

        Logon = $employee.Name
        FirstName = $employee.GivenName
        LastName = $employee.Surname

    }
}
[XML]$Form = (Get-Content "C:\temp\test.xaml")
$NR = (New-Object System.Xml.XmlNodeReader $Form)
$Win = [Windows.Markup.XamlReader]::Load($NR)
# this part
($win.FindName("ListView")).ItemsSource = $itemSource

$Win.ShowDialog()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM