【问题标题】:How to bind 3 comboboxes POWERSHELL and WPF如何绑定 3 个组合框 POWERSHELL 和 WPF
【发布时间】:2015-12-09 19:07:56
【问题描述】:

这是我的问题:我有 3 个ComboBoxes 从 mdb 文件中读取数据。

从第一个中选择的值将影响在第二个中显示的内容,从第二个中选择的值将影响在第三个中显示的内容。第三个结果将填充到TextBox

这是我用来加载数据的代码:

function GetData() {

    $objOleDbConnection1= New-Object "System.Data.OleDb.OleDbConnection"
    $objOleDbCommand = New-Object "System.Data.OleDb.OleDbCommand"
    $objOleDbAdapter = New-Object "System.Data.OleDb.OleDbDataAdapter"
    $objDataTable = New-Object "System.Data.DataTable"

    $objOleDbConnection1.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Script\test_1.mdb;"
    $objOleDbConnection1.Open()
    $objOleDbCommand.Connection = $objOleDbConnection1
    $objOleDbCommand.CommandText = "SELECT SORT + ' ' + '-' + ' ' + Tekst, SAPstruktur FROM SAPstruktur where SAPstruktur like 'A__' ORDER BY ID ASC"

    #set the Adapter object
    $objOleDbAdapter.SelectCommand = $objOleDbCommand

    #fill the objDataTable object with the results
    $objOleDbAdapter.Fill($objDataTable)
    return $objDataTable.DefaultView
    $objOleDbConnection1.Close()
}

这是我的组合框 #1 的 XAML 代码:

<ComboBox x:Name="mdb" HorizontalAlignment="Left" VerticalAlignment="Top" Width="275" Grid.Column="1"  DisplayMemberPath="Expr1000" SelectedValuePath="SAPstruktur" ItemsSource="{Binding PsList[GetData]}" SelectedIndex="0"/>

问题:如何连接所有这 3 个组合框?我设法填充了所有三个组合框(调用函数 GetData、GetData1 等),但我不知道如何将它们连接在一起。

我使用 WPF 对话窗口 (XAML) + PowerShell 文件,所以我猜想该操作发生在 ps1 中,将结果发送到 XAML。

提前致谢!

【问题讨论】:

  • 我不完全确定连接组合框是什么意思。你能描述一下你通过“连接”他们想要达到的目标吗?
  • 这可能会有所帮助:$combo1.Add_DropDownClosed({ #populate $combo2 }), $combo2.Add_DropDownClosed({ #populate $combo3 }) @Mathias R Jessen 看图片
  • 感谢您的回复。通过连接我意味着以某种方式绑定它们,如果我从第一个中选择一个值,这个选择将影响第二个中的列表值,从第二个中选择的值将影响第三个中的值列表...@ sodawillow:我需要将任何变量绑定到 WPF 吗?我应该把这段代码放在哪里?函数内部??
  • @sodawillow : 我需要将任何变量绑定到 WPF 吗?我应该把这段代码放在哪里?函数内部??请记住,组合框不在 powershell 脚本中。它位于 xaml 文件中,因此需要在 powershell 脚本变量和 WPF (xaml) 之间进行一些绑定。
  • 你可以阅读这篇文章来学习如何做:learn-powershell.net/2014/08/01/powershell-and-wpf-checkboxes(已编辑)

标签: wpf xaml powershell combobox


【解决方案1】:

这是一个非常简单的工作示例。

当在ComboBox1 中选择一个项目时,ComboBox2 被清空并填充适当的值。

#XAML for GUI
[xml]$xaml = @"
<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Name="Window" Title="Initial Window" WindowStartupLocation = "CenterScreen"
    SizeToContent = "WidthAndHeight" ShowInTaskbar = "True" Background = "lightgray"> 
    <StackPanel>
    <ComboBox x:Name="ComboBox1">
        <ComboBoxItem>France</ComboBoxItem>
        <ComboBoxItem>USA</ComboBoxItem>
    </ComboBox>
    <ComboBox x:Name="ComboBox2">
    </ComboBox>
</StackPanel>
</Window>
"@

#load XAML
$reader = (New-Object System.Xml.XmlNodeReader $xaml)
$Window = [Windows.Markup.XamlReader]::Load($reader)

#bind WPF elements to PS variables
$ComboBox1 = $Window.FindName("ComboBox1")
$ComboBox2 = $Window.FindName("ComboBox2")

#event: when ComboBox1 is closed
$ComboBox1.Add_DropDownClosed({

    #empty ComboBox2   
    $ComboBox2.Items.Clear()

    #depending on ComboBox1 value
    switch($ComboBox1.Text) {

        "France" {
            #add items  to ComboBox2
            $ComboBox2.Items.Add("Paris")
            $ComboBox2.Items.Add("Lyon")
        }

        "USA" {
            #add items to ComboBox2
            $ComboBox2.Items.Add("New-York")
            $ComboBox2.Items.Add("Chicago")            }
    }
})

#show window
$Window.Showdialog() | Out-Null

根据我在这里阅读的内容:http://learn-powershell.net/2014/08/01/powershell-and-wpf-checkboxes/

【讨论】:

  • 应该是 $ComboBox1.Add_DropDownClosed() 还是 $ComboBox1.Add_SelectionChanged() 或其他完全的东西?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-18
  • 2011-03-09
  • 1970-01-01
相关资源
最近更新 更多