为什么在PowerShell中使用TextBox“Text”属性不能使用WPK DataBinding?

时间:2011-05-01 12:31:26

标签: wpf data-binding powershell datacontext wpk

美好的一天。我想问一个问题。 为什么TextBox控件“Text”在这段代码中没有收到$ Counter Object对象的属性值?

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 个答案:

答案 0 :(得分: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

希望有所帮助!