gpt4 book ai didi

c# - 在 PowerShell 中使用 XAML/WPF,如何填充列表框?

转载 作者:太空狗 更新时间:2023-10-29 20:09:50 25 4
gpt4 key购买 nike

我在这里找到了许多很棒的话题,但似乎无法找到我的答案。我正在使用 Visual Studio 制作 GUI,并将 XAML 复制/粘贴到 PowerShell 中。我知道我应该在 c# 中执行此操作,但由于我的知识还不存在,所以它对我来说是纯 PowerShell。

所以我已经制作了我的 GUI,但我似乎无法填充我的数据字段。做文本框等其他事情是可以解决的,但我似乎无法让这个 ListView /数据网格填充值。

enter image description here

此刻,与 Azure 的连接已被删除,直到我可以解决向列表框添加项目的问题。

XAML 绘制我的表单

[void][System.Reflection.Assembly]::LoadWithPartialName('presentationframework')
[xml]$XAML = @'
<Window
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:Azure"
Title="Azure Accelerator" Height="300" Width="315">
<Grid Margin="0,0,174,0">
<Image Name="image" HorizontalAlignment="Left" Height="46" Margin="10,10,-97,0" VerticalAlignment="Top" Width="210" Source="C:\Users\stephen\Dropbox\My Code\Powershell\WPF\mslogo.png"/>
<TextBlock Name="textBlock" HorizontalAlignment="Left" Height="21" Margin="10,61,-140,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="248" Text="VM PickerUse"/>
<Button Name="btnOK" Content="OK" HorizontalAlignment="Left" Margin="217,268,-160,0" VerticalAlignment="Top" Width="75" Height="23"/>
<Button Name="btnExit" Content="Cancel" HorizontalAlignment="Left" Margin="12,268,0,0" VerticalAlignment="Top" Width="75" Height="23"/>
<ListView Name="listView" HorizontalAlignment="Left" Height="108" Margin="12,107,-140,0" VerticalAlignment="Top" Width="246">
<ListView.View>
<GridView>
<GridViewColumn Header="VMName" DisplayMemberBinding ="{Binding VMName}"/>
<GridViewColumn Header="Status" DisplayMemberBinding ="{Binding Status}"/>
<GridViewColumn Header="Other"/>
</GridView>
</ListView.View>
</ListView>
</Grid>
</Window>
'@

将XAML加载到内存/制作对象

#Read XAML

$reader=(New-Object System.Xml.XmlNodeReader $xaml)
try{$Form=[Windows.Markup.XamlReader]::Load( $reader )}
catch{Write-Host "Unable to load Windows.Markup.XamlReader. Some possible causes for this problem include: .NET Framework is missing PowerShell must be launched with PowerShell -sta, invalid XAML code was encountered."}

#===========================================================================
# Store Form Objects In PowerShell
#===========================================================================

$xaml.SelectNodes("//*[@Name]") | %{Set-Variable -Name "VMpick$($_.Name)" -Value $Form.FindName($_.Name)}

我可能需要帮助的地方

#Try to setup a dummy entry
$vmpicklistView.items.Add( @{'VMName'='1';Status="AccessDenied";'Other'='1'})

#===========================================================================
# Shows the form
#===========================================================================
$Form.ShowDialog() | out-null

正如您从我的屏幕截图中看到的那样,当我向列添加绑定(bind)时(我认为这会实例化列并让我为它们插入值......不)当我尝试添加时它们不再更新一个新项目。但是,我没有应用绑定(bind)的“其他”列至少显示了一些输入,但它错误地列出了集合,就好像它试图显示整个哈希表一样。

那么,我的最后一个问题是,如何将项目添加到 ListView ?

最佳答案

好的,我找到答案了。事实证明,当我使用 .Add 时,我应该指定一个 PowerShell 自定义对象作为我的重载,而不是像我以前那样指定一个简单的哈希表。当我将代码更改为以下内容时:

#Add DisplayMemberBindings for all columns
<GridViewColumn Header="VMName" DisplayMemberBinding ="{Binding VMName}"/>
<GridViewColumn Header="Status" DisplayMemberBinding ="{Binding Status}"/>
<GridViewColumn Header="Other" DisplayMemberBinding ="{Binding Other}"/>

然后也修改我的添加语句:

$vmpicklistView.items.Add([pscustomobject]@{'VMName'='1';Status="Access Denied";Other="Yes"})

我可以像这样填充我的字段

#Make Dummy Entries 
1..15 | % {
if ($_ % 2){$vmpicklistView.items.Add([pscustomobject]@{'VMName'="VM_$($_)";Status="Online";Other="Yes"})}
else{$vmpicklistView.items.Add([pscustomobject]@{'VMName'="VM_$($_)";Status="Access Denied";Other="Yes"})}
}

enter image description here

为什么我必须这样做?

这是我对为什么需要这样做的解释。 PowerShell 自定义对象提供具有命名值的对象,我可以使用绑定(bind)将其提取出来,而哈希表是键/值对的集合,不太适合此目的。

我希望这个答案能帮助其他像我一样被难倒的人!

关于c# - 在 PowerShell 中使用 XAML/WPF,如何填充列表框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29544866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com