WPF数据网格从选定行(Powershell)获取选定组合框值

时间:2019-07-05 18:05:30

标签: wpf powershell combobox binding datagrid

因此,也许我正在以错误的方式进行处理,请随时提出任何建议或提示。 当前使用Powershell在wpf中使用DataGrid表来执行所有逻辑。这是表格:

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绑定时如何绑定。

编辑: 如果有帮助,这是我填充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 个答案:

答案 0 :(得分:1)

您应将SelectedItem的{​​{1}}属性绑定到数据对象的属性,其中数据对象已经定义了ComboBoxServerEnvironment属性:

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'})