Привязка данных PowerShell и XAML

#wpf #powershell #xaml

#wpf #powershell #xaml

Вопрос:

Я пытаюсь получить список пользователей, выполняющих поиск по свойству фамилии, и перечислить их в ListView.

Вот код XAML:

 <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>
  

И это выглядит так:
Внешний вид XAML

Я считаю, что не могу сделать это без привязки данных, и я видел много сообщений о них, но я не мог полностью понять это.

На данный момент в powershell у меня есть:

 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()
  

Теперь ForEach работает отлично и возвращает именно то, что мне нужно, но не может найти способ поместить его в список просмотра.

Затем мне нужно будет сохранить выбранного пользователя в переменной, которую я позже выведу в текстовом поле.

Извините, если это глупый / простой вопрос, но я только начал изучать PowerShell, чтобы помочь мне автоматизировать свою работу.

Ответ №1:

В загруженной форме необходимо указать ItemsSource для ListView

в PowerShell вы можете сделать это следующим образом

 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:temptest.xaml")
$NR = (New-Object System.Xml.XmlNodeReader $Form)
$Win = [Windows.Markup.XamlReader]::Load($NR)
# this part
($win.FindName("ListView")).ItemsSource = $itemSource

$Win.ShowDialog()

  

Комментарии:

1. Милый младенец Иисус, это было ТАК просто. Большое вам спасибо!