Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF datagrid从所选行获取所选组合框值(Powershell)_Wpf_Powershell_Combobox_Binding_Datagrid - Fatal编程技术网

WPF datagrid从所选行获取所选组合框值(Powershell)

WPF datagrid从所选行获取所选组合框值(Powershell),wpf,powershell,combobox,binding,datagrid,Wpf,Powershell,Combobox,Binding,Datagrid,因此,也许我的做法是错误的,请随意给出任何建议或提示。 目前正在使用powershell处理wpf中的DataGrid表以执行所有逻辑。这是表格: 从选定行正确提取所有数据(包括combobox选定值)的最佳方法是什么? 目前我正在尝试: $test = $AddServerwpf.ServerGrid.SelectedItems[0] Write-Host "Selected: $test" 对于上下文,$AddServerwpf包含该窗口的所有对象。ServerGrid是DataGrid

因此,也许我的做法是错误的,请随意给出任何建议或提示。 目前正在使用powershell处理wpf中的DataGrid表以执行所有逻辑。这是表格:

从选定行正确提取所有数据(包括combobox选定值)的最佳方法是什么? 目前我正在尝试:

$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
这显然没有告诉我从下拉列表中选择了哪个帐户。如何获得组合框选择?我已经在谷歌上深入研究了关于这个问题的其他问题,但我没有找到一个有效的答案。如何将combobox正确绑定到datagrid?还是以某种方式访问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>
您应该将组合框的SelectedItem属性绑定到数据对象的属性,其中已经定义了服务器、环境和ServiceAccount属性:

<ComboBox x:Name="ServiceAccount" ItemsSource="{Binding ServiceAccount}" 
    SelectedItem={Binding SelectedAccount, UpdateSourceTrigger=PropertyChanged}" />
然后,您可以使用此属性获取项目的选定值,例如:

$AddServerwpf.ServerGrid.SelectedItems[0].SelectedAccount
$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