Wpf 使用PowerShell数据绑定创建动态列表框

Wpf 使用PowerShell数据绑定创建动态列表框,wpf,powershell,data-binding,listbox,Wpf,Powershell,Data Binding,Listbox,我希望在PowerShell中创建一个WPF列表框,而不加载任何硬XAML(类似于下图),该XAML在单击箭头按钮时使用数据绑定将数据从一个列表框移动到另一个列表框。我还处于编码阶段的早期,很难概念化如何将各种数据绑定组件配置在一起 哈希表:必须为两个列表框创建单独的$Hash表(以及相应的$DataContext)吗 绑定:绑定与在列表框之间移动数据有什么关系?绑定仍然是单向的还是双向的?或者这仅仅是一个按钮独立地操纵两个列表框的问题 在这种情况下,$Binding.Path的示例是什么 我将

我希望在PowerShell中创建一个WPF列表框,而不加载任何硬XAML(类似于下图),该XAML在单击箭头按钮时使用数据绑定将数据从一个列表框移动到另一个列表框。我还处于编码阶段的早期,很难概念化如何将各种数据绑定组件配置在一起

  • 哈希表:必须为两个列表框创建单独的
    $Hash
    表(以及相应的
    $DataContext
    )吗
  • 绑定:绑定与在列表框之间移动数据有什么关系?绑定仍然是单向的还是双向的?或者这仅仅是一个按钮独立地操纵两个列表框的问题
  • 在这种情况下,
    $Binding.Path
    的示例是什么

  • 我将om哈希表和ObservableCollections组合用于我的WPF gui

    首先是收集所有数据和绑定的哈希表。它是同步的,因此哈希表可以在多EL运行空间中使用。如果您想要一个不冻结的GUI,有时需要这样做

    $syncHash = [hashtable]::Synchronized( @{} )
    
    然后为每一个目的收集

    $syncHash.DataContext = New-Object System.Collections.ObjectModel.ObservableCollection[Object]
    
    在这个集合中,我放置了与我将绑定到的对象相对应的值。我喜欢把索引和目的作为一个评论放在最后,这样我可以稍后再回来。稍后需要索引

    $syncHash.DataContext.Add( ( New-Object System.Collections.ObjectModel.ObservableCollection[Object] ) ) # 1 All files
    
    现在是创建绑定对象的时候了。“Window”是WPF窗口对象的变量名

    $Bindings = New-Object System.Collections.ObjectModel.ObservableCollection[Object]
    0..( $syncHash.DataContext.Count - 1 ) | foreach { [void]$Bindings.Add( ( New-Object System.Windows.Data.Binding -ArgumentList "[$_]" ) ) }
    $Bindings | foreach { $_.Mode = [System.Windows.Data.BindingMode]::TwoWay }
    $syncHash.Window.DataContext = $syncHash.DataContext
    
    现在我们对控件及其属性进行绑定。在这里,我们需要使用与前面相同的索引、控件名称、控件类型和propertyname

    [void][System.Windows.Data.BindingOperations]::SetBinding( $syncHash.lvAllFiles [System.Windows.Controls.ListView]::ItemsSourceProperty, $Bindings[1] )
    
    要使用绑定,请调用collectionname和索引,然后设置所需的值。类似于以下情况之一:

    $syncHash.DataContext[1] = $List
    $syncHash.DataContext[1] += "Text"
    $syncHash.DataContext[1].Add( "Text" )
    
    如何使用它取决于绑定到哪种类型的值(控件的权限)和/或该索引处的DataContext集合中的内容


    如果要为多个属性创建多个绑定,还可以为每个控件创建单独的DataContext集合或不同的绑定集合。这将简化管理,但请记住绑定的名称和/或您将绑定到的集合。

    我假设是WPF,或者您正在WinForms中尝试这样做?也许可以在问题上加上标签。谢谢你的建议。我正在使用WPF,但没有加载任何XAML。这也是我使用的方式。然而,我大部分时间都在XML中使用它。这样我就不需要在代码behinde中创建绑定。。。