WPF и PowerShell: установка выбранного элемента в ComboBox при использовании с ItemTemplate - PullRequest
0 голосов
/ 08 января 2019

У меня есть следующие настройки комбинированного окна, как показано ниже:

<ComboBox x:Name="ComboBoxCountry" HorizontalAlignment="Left" Margin="166,288,0,0" VerticalAlignment="Top" Width="470" Height="24" ScrollViewer.VerticalScrollBarVisibility="Visible">
<ComboBox.ItemTemplate>
    <DataTemplate>
        <TextBlock Text="{Binding EnglishName}" />
    </DataTemplate>
</ComboBox.ItemTemplate>

В качестве части моего сценария, который предоставляет немного контекста, является сценарий создания пользователя с функцией шаблонов, я экспортирую выбранный элемент в Json вместе с другими пользовательскими данными. Я беру весь выбранный элемент с помощью приведенной ниже команды (для удобства я удалил другие данные пользователя из объекта):

$UserObject = [PSCustomObject] @{
    "Country" = $MainScreenComboBoxCountry.SelectedItem
}

Когда я вернусь, чтобы импортировать шаблон позже, мой объект будет таким, как показано ниже:

Страна: @ {TwoLetterISORegionName = AW; EnglishName = Aruba}

И когда я это называю, он правильно расширяется, как показано ниже:

PS C:\Windows\system32> $JsonObject.UserDetails.Country

TwoLetterISORegionName EnglishName
---------------------- -----------
AW                     Aruba

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

$MainScreenComboBoxCountry.SelectedItem = $JsonObject.UserDetails.Country

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

Function Get-CountryCodes {
    $AllCultures = [System.Globalization.CultureInfo]::GetCultures([System.Globalization.CultureTypes]::SpecificCultures)
    $CountryDetails = @()

    $AllCultures | ForEach-Object {
        $DisplayName = $_.DisplayName.Split(“(|)”)
        $RegionInfo = New-Object System.Globalization.RegionInfo $PsItem.Name
        $CountryDetails += [PsCustomObject]@{
            Name = $RegionInfo.Name
            EnglishName = $RegionInfo.EnglishName
            TwoLetterISORegionName = $RegionInfo.TwoLetterISORegionName
        }
    }

    $Countries = $CountryDetails | Select-Object -Unique -Property TwoLetterISORegionName,EnglishName | Sort-Object EnglishName

    $Countries = $Countries | Where-Object TwoLetterISORegionName -CMatch “^[A-Z]*$”
    Return $Countries
}
$MainScreenComboBoxCountry.ItemsSource = Get-CountryCodes

Странно, я не получаю никаких ошибок, но он просто не устанавливает выбранный элемент.

1 Ответ

0 голосов
/ 08 января 2019

Мне удалось решить с помощью приведенного ниже кода:

ForEach ($ComboBoxItem in $MainScreenComboBoxCountry.Items) {
            If ($ComboBoxItem.EnglishName -eq $JsonObject.UserDetails.Country.EnglishName) {
                $CorrectComboBoxItem = $ComboBoxItem
            }
        }
    $MainScreenComboBoxCountry.SelectedIndex = $MainScreenComboBoxCountry.Items.IndexOf($CorrectComboBoxItem)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...