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" に (配列として) 表示されます。

したがって、データバインディング パスを "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 に答える