Мне нужна помощь, чтобы понять, почему элементы списка не группируются в приведенном ниже примере.
Данные 'Свойство' и 'Значение' заполняются, но группировка вообще отсутствует. Я собрал воедино этот сценарий из онлайн-примеров, не разбираясь в XAML, в том, как работает привязка данных и т. Д. И как он должен работать в контексте PowerShell. Он работал , но я реорганизовал код, и функциональность группировки не работала, и теперь я не могу понять, почему.
Если кто-нибудь может мне помочь, это будет очень признательно.
ModalWindow.xaml
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp2"
Title="Confirm User Details" Height="580" Width="360" >
<Grid Margin="10">
<ListView Name="DataListView" Margin="0" VerticalAlignment="Top" Height="475">
<ListView.Resources>
<Style TargetType="GridViewColumnHeader">
<Setter Property="Visibility" Value="Collapsed" />
</Style>
</ListView.Resources>
<ListView.View>
<GridView>
<GridViewColumn Width="110" DisplayMemberBinding="{Binding Property}" />
<GridViewColumn Width="196" DisplayMemberBinding="{Binding Value}" />
</GridView>
</ListView.View>
<ListView.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<TextBlock Margin="5" TextDecorations="Underline" FontSize="13" Text="{Binding Name}"/>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ListView.GroupStyle>
</ListView>
<Button Name="ConfirmButton" Content="OK" Height="39" Width="160" HorizontalAlignment="Left" VerticalAlignment="Bottom" />
<Button Name="CancelButton" Content="Cancel" Margin="0" Width="160" Height="39" HorizontalAlignment="Right" VerticalAlignment="Bottom"/>
</Grid>
</Window>
Main.ps1
Function GetListViewItemsSource() {
Param ($NewADUserParams)
$Data = @()
$Groupings = @{
DEFAULT = "Other";
GENERAL = "General";
ACCOUNT = "Account";
ORGANIZATION = "Organization";
}
$IgnoredKeys = @("PassThru", "Enabled")
$GroupingsMap = @{
Description = $Groupings.GENERAL;
UserPrincipalName = $Groupings.ACCOUNT;
DisplayName = $Groupings.GENERAL;
SamAccountName = $Groupings.ACCOUNT;
AccountExpirationDate = $Groupings.ACCOUNT;
Name = $Groupings.GENERAL;
Company = $Groupings.ORGANIZATION;
}
ForEach ($Key in $NewADUserParams.Keys) {
If ($IgnoredKeys -contains $Key) { Continue; }
$Grouping = $Groupings.DEFAULT
If ($GroupingsMap.ContainsKey($Key)) {
$Grouping = $GroupingsMap[$Key]
}
$Data += New-Object PSObject -prop @{Property = $Key; Value = $NewADUserParams[$Key]; Grouping = $Grouping; }
}
$ListViewItemsSource = [System.Windows.Data.ListCollectionView] $Data
$ListViewItemsSource.GroupDescriptions.Add((New-Object System.Windows.Data.PropertyGroupDescription "Grouping"))
Return $ListViewItemsSource
}
Function ShowModalWindow() {
Param ($ListViewItemsSource)
[XML] $ModalWindowXAML = Get-Content -Path $Config.XAML.ModalWindow
$NodeReader = (New-Object System.Xml.XmlNodeReader $ModalWindowXAML)
$ModalWindow = [Windows.Markup.XamlReader]::Load( $NodeReader )
$ListView = $ModalWindow.FindName("DataListView")
$ListView.ItemsSource = $ListViewItemsSource
$ConfirmButton = $ModalWindow.FindName("ConfirmButton")
$CancelButton = $ModalWindow.FindName("CancelButton")
$Response = @{
Value = 0
}
$ConfirmButton.Add_Click( {
$Response.Value = 1
$ModalWindow.Close()
})
$CancelButton.Add_Click( {
$ModalWindow.Close()
})
$ModalWindow.ShowDialog()
Return $Response
}
$NewADUserParams = @{
# ...
Description = "bar, foo";
DisplayName = "bar, foo";
SamAccountName = "foo.bar";
AccountExpirationDate = "12/31/9999 00:00:00";
Name = "foo.bar";
GivenName = "foo";
Title = boss;
OtherAttributes = System.Collections.Hashtable;
Surname = "bar";
ChangePasswordAtLogon = True;
# etc...
}
$ListViewItemsSource = GetListViewItemsSource -NewADUserParams $NewADUserParams
$ConfirmUserProps = ShowModalWindow -ListViewItemsSource $ListViewItemsSource
Результирующий модальныйДиалог
Редактировать
Чтобы уточнить, я пытаюсь достичь этого:
См .: https://www.wpf -tutorial.com / listview-control / listview-grouping /