有没有办法使用Powershell和WPF向循环中的多个按钮添加点击事件?

问题描述 投票:0回答:1

我有几个按钮在不同的列表框中执行相同的功能(对它们进行排序,或打开 Out-GridView 来搜索它们)。我想通过向循环中的按钮添加单击事件来使我的代码更加“DRY”。但是,当我尝试时,所有按钮仅执行循环中最后一个按钮的功能。

这是我的代码:

$gui.btnNewUserGroupsSort.Add_Click({
    SortListbox -listboxName "lsbNewUserGroups"
})

$gui.btnNewUserHuntGroupsSort.Add_Click({
    SortListbox -listboxName "lsbNewUserHuntGroups"
})

$gui.btnAvailableGroupsSort.Add_Click({
    SortListbox -listboxName "lsbAvailableGroups"
})

$gui.btnAvailableHuntGroupsSort.Add_Click({
    SortListbox -listboxName "lsbAvailableHuntGroups"
})

如果有解决方案,我想使用以下代码:

$sortCategories = @(
    "NewUserGroups",
    "NewUserHuntGroups",
    "AvailableGroups",
    "AvailableHuntGroups"
)

Foreach ($sortCategory in $sortCategories) {
    $button = "btn$($sortCategory)Sort"
    $listbox = "lsb$($sortCategory)"
    $gui.$button.Add_Click({
        SortListbox -listboxName $listbox
    })
}

我尝试向单击事件添加 GetNewClosure() 方法,但是当我这样做时,由于范围问题(我认为),我无法再调用 SortListbox 函数。

wpf powershell
1个回答
0
投票

您需要的是一个 closure 来捕获每次迭代中

$listbox
变量的当前值:

# ...
    $listbox = "lsb${sortCategory}"
    $gui.$button.Add_Click({
      SortListbox -listboxName $listbox
    }.GetNewClosure())
# ...

注:

© www.soinside.com 2019 - 2024. All rights reserved.