0

再会。我想问一个问题。为什么这段代码中的 TextBox 控件“Txt”没有接收到 $CounterObject 对象的属性值?

New-Grid -Height 150 -Width 200 -Rows 3 {
    New-Label -Name InfoLabel -Row 0 "Some message" 
    New-TextBox -Name Txt -Row 1 -DataBinding @{ Text = New-Binding -Path CounterValue -Mode OneWay}
    New-Button -Name B1 -Row 2 -Width 100 "OK"  
} -DataContext {
    Get-PowerShellDataSource -Script {
    $CounterObject = New-Object -TypeName PSObject -Property @{ CounterValue = "Some Text" }
    ForEach-Object {
        $_.CounterValue 
    }
    } 
} -on_Loaded  {
    Register-PowerShellCommand -Run -Once -ScriptBlock {
     $window.Content.DataContext.Script = $window.Content.DataContext.Script
    }
}  -asjob
4

1 回答 1

1

如果您单独查看 Get-PowerShellDataSource 的输出,您会看到: 1. 您的脚本不起作用(没有输出)。2. 当你修复脚本时(见下文),输出可以在属性“输出”中找到(作为一个数组)。

因此,如果您将数据绑定路径更改为“Output[0].CounterValue”,它将起作用。

您也不需要 onLoaded 事件处理程序。

此代码有效:

New-Grid -Height 150 -Width 200 -Rows 3 {
    New-Label -Name InfoLabel -Row 0 "Some message"
    New-TextBox -Name Txt -Row 1 -DataBinding @{ Text = New-Binding -Path Output[0].CounterValue -Mode OneWay}
    New-Button -Name B1 -Row 2 -Width 100 "OK"
} -DataContext {
    Get-PowerShellDataSource -Script {
        $CounterObject = New-Object -TypeName PSObject -Property @{ CounterValue = "Some Text" }
        Return $CounterObject
    }
} -asjob

希望有帮助!

于 2011-05-20T12:23:44.813 回答