我正在使用ShowUI来探索PowerShell GUI,它基于幕后的WPF,我正在努力让数据绑定工作。理想情况下,我希望我的数据和文本框的哈希表绑定到属性,因此键入文本框会更新哈希表并更新哈希表更新文本框。或者近似的东西。
我不知道WPF数据绑定的方法,我正在尝试这样的事情:
ipmo showui
StackPanel {
label -name "a" -Content { binding -ElementBinding b -path Text }
Textbox -name "b"
} -Show
我得到的是一个显示的UI,但键入不会改变任何东西。我已经尝试了相当多的试错法 - 使用Textbox -Text { binding... }
设置绑定,而使用binding -Source a
而不是ElementBinding,使用binding -Source $a
设置绑定,使用button
。 1}}使用控件的变量名,在文本框或父堆栈面板上使用-DataContexts,在命令的各个位置尝试使用和不使用默认值。我已经尝试将ipmo showui
$s = [pscustomobject]@{fname="Mahak"; lname="Garg";}
Grid -Name "StuInfo" -rows 3 {
TextBox -Text { Binding fname } -row 0
Textbox -Text { Binding lname } -row 1
Button -name "button1" -Content "Next" -row 2 -On_Click {
$s2 = [pscustomobject]@{fname="Jupi"; lname="Gupta";}
$stuinfo.DataContext = $s2
Write-Host "."
}
} -On_Loaded {
$stuinfo.DataContext = $s
} -show
与事件处理程序一起使用,该处理程序更新哈希表并尝试绑定哈希表,或者使用PSCustomObject;将文本框绑定到滑块值 - 大量试验和错误,但没有结果。
在ShowUI here中有一个数据绑定示例,它将命令帮助拉入列表并逐步执行,看起来工作正常。只要你在文件夹中有图片,first example here也可以正常工作。这些让我觉得ShowUI可以处理数据绑定 - 而且没有脚手架或初始化代码。
关注this C# tutorial并尝试将其几乎字面上移植到ShowUI,我得到了这个:
.
UI出现,而数据则没有。单击该按钮会将void onSomeEvent(string someArg) {
var h = this.EventName;
if (h != null) {
h(this, new MyEventArgs(someArg));
}
}
写入控制台,但不会更新文本框。
我正在使用PowerShell 4,所以我无法直接使用类,以及最新的ShowUI 1.5(我认为)开发分支来自Github。 [编辑:这至少是我的问题的一部分,实际上是在一台计算机上使用旧版本而在另一台计算机上使用新版本]
我错过了什么或误解了什么?
答案 0 :(得分:1)
我之前从未使用过ShowUI(直到我看到这个问题才知道它存在)。所以,我下载了它并尝试了上面的脚本。我得到了和你一样的结果。我发现On_Loaded方法中的$ s变量为null。将$ s的两个实例更改为$ global:s使其工作:
unset($_SESSION["user"]);
你拥有的第一个脚本,我无法绑定到一个正在工作的元素。我尝试使用DataContext以这种方式链接它们并且它有效...等等。似乎首先绑定到属性的是唯一可以更新它的项目。所以,如果文本框是第一个然后它工作,但如果标签是第一个它不起作用。
使用:
ipmo showui
$global:s = [pscustomobject]@{fname="Mahak"; lname="Garg";}
Grid -Name "StuInfo" -rows 3 {
TextBox -Text { Binding fname } -row 0
Textbox -Text { Binding lname } -row 1
Button -name "button1" -Content "Next" -row 2 -On_Click {
$s2 = [pscustomobject]@{fname="Jupi"; lname="Gupta";}
$stuinfo.DataContext = $s2
Write-Host "."
}
} -On_Loaded {
$stuinfo.DataContext = $global:s
} -show
不起作用:
ipmo showui
$dc = [pscustomobject]@{ myText="my text" }
StackPanel {
Textbox -Text {Binding -Path myText -UpdateSourceTrigger PropertyChanged}
Label -Content {Binding -Path myText}
} -Show -DataContext @($dc)
$dc
我希望这会对你有所帮助......看起来ShowUI会是一个不错的工具,但是IDK似乎很不错。