2011-05-01 43 views
0

美好的一天。我想問一個問題。 爲什麼在此代碼中TextBox控件「Txt」沒有收到$ CounterObject對象的屬性值?爲什麼在PowerShell中使用TextBox「Text」屬性無法使用WPK DataBinding?

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 

回答

1

如果你看一下獲取-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 

希望幫助!

+0

謝謝。我會試試這個。但是,在哪裏可以找到有關「輸出」變量的信息?在officail文檔中沒有聲明這個變種。 – ProgrammerManiac 2011-05-20 16:01:08

+0

最簡單的方法可能是查看Get-PowerShellDataSource -Script {「Foo」}的輸出。請注意,在這種情況下,scriptblock返回「Foo」,並且該值也可以在Output屬性中找到。 可能有更簡單/更好的方法來解決這個問題。不幸的是,我不知道足夠的WPK。 – 2011-05-20 20:14:59

+0

下午好。實際上一切正常。謝謝。請告訴我你在哪裏瞭解到數組Output []?腳本的哪一點以及該對象是如何創建的? – ProgrammerManiac 2011-06-11 14:16:45

相關問題