#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. Милый младенец Иисус, это было ТАК просто. Большое вам спасибо!