Почему не работает WPK DataBinding в PowerShell со свойством TextBox "Текст"?
Добрый день. Я хотел бы задать вопрос. Почему элемент управления 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
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
Надеюсь, это поможет!