Сетка данных WPF получает выбранное значение комбинированного списка из выбранной строки (Powershell) - PullRequest
0 голосов
/ 05 июля 2019

Так что, возможно, я подхожу к этому неправильно, не стесняйтесь давать любые советы или подсказки. В настоящее время работаем с таблицей DataGrid в wpf, используя powershell для выполнения всей логики. Вот таблица:

enter image description here

Каков наилучший способ правильно извлечь все данные, ВКЛЮЧАЯ выбранное значение в выпадающем списке из выбранной строки? В настоящее время я пытаюсь это:

$test = $AddServerwpf.ServerGrid.SelectedItems[0] 
Write-Host "Selected: $test"

Для контекста $ AddServerwpf содержит все объекты для этого окна. ServerGrid - это объект DataGrid. Я использую .SelectedItems [0], чтобы получить эту строку.

Возвращает:

Selected: @{Server=server1; Environment=Prod; ServiceAccount=System.Object[]}

Если я сделаю еще один шаг с:

$AddServerwpf.ServerGrid.SelectedItems[0].ServiceAccount

Я получаю:

Selected: account1 account2 account3

Это явно не говорит мне, какая учетная запись была выбрана из выпадающего списка. Как я могу получить выбор в выпадающем списке? Я посмотрел довольно глубоко через Google с другими вопросами по этому поводу, и я не нашел рабочего ответа. Как правильно связать комбинированный список с сеткой данных? Или лучше как-нибудь добраться до объекта Combobox и извлечь текст?

Вот XAML:

<Window x:Class="ServerManagmentApp.AddServer" x:Name="AddServerWindow"
    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:ServerManagmentApp"
    mc:Ignorable="d"
    Title="AddServer" Height="359.7" Width="387.4" Background="#FF2B2929">
<Grid>
    <Button x:Name="AddServerButton" Content="Add Server" HorizontalAlignment="Left" Margin="220,260,0,0" VerticalAlignment="Top" Width="120" Height="40" Background="#FF1FD14F"/>
    <DataGrid x:Name="ServerGrid" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Height="213" Width="275" Background="#FF888F8A" SelectionMode="Single">

        <DataGrid.Columns>

            <DataGridTextColumn Header="Server" Binding="{Binding Server}" Width="*" />
            <DataGridTextColumn Header="Environment" Binding="{Binding Environment}" Width="*" />

            <DataGridTemplateColumn Header="ServiceAccount" Width="*">
                <DataGridTemplateColumn.CellTemplate>

                    <DataTemplate>
                        <ComboBox x:Name="ServiceAccount" ItemsSource="{Binding ServiceAccount}" SelectedIndex="0"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>
</Window>

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

EDIT: Вот как я заполняю DataGrid, если это помогает

$list = "account1","account2","account3"
$AddServerwpf.ServerGrid.AddChild([pscustomobject{Server='server1';Environment='Prod';ServiceAccount=$list})
$AddServerwpf.ServerGrid.AddChild([pscustomobject]@{Server='server2';Environment='Prod';ServiceAccount=$list})
$AddServerwpf.ServerGrid.AddChild([pscustomobject]@{Server='server3';Environment='Prod';ServiceAccount=$list})

1 Ответ

1 голос
/ 08 июля 2019

Вы должны связать свойство SelectedItem ComboBox со свойством вашего объекта данных, где свойства Server, Environment и ServiceAccount уже определены:

<ComboBox x:Name="ServiceAccount" ItemsSource="{Binding ServiceAccount}" 
    SelectedItem={Binding SelectedAccount, UpdateSourceTrigger=PropertyChanged}" />

$list = "account1","account2","account3"
$AddServerwpf.ServerGrid.AddChild([pscustomobject{Server='server1';Environment='Prod';ServiceAccount=$list;SelectedAccount='account1'})
$AddServerwpf.ServerGrid.AddChild([pscustomobject]@{Server='server2';Environment='Prod';ServiceAccount=$list;SelectedAccount='account1'})
$AddServerwpf.ServerGrid.AddChild([pscustomobject]@{Server='server3';Environment='Prod';ServiceAccount=$list;SelectedAccount='account1'})

Затем вы можете получить выбранное значение элемента, используя это свойство, например ::

$AddServerwpf.ServerGrid.SelectedItems[0].SelectedAccount
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...