2016-05-06 18 views
0

私はShowUIを使用してPowerShell GUIを調べています。これは裏のWPFをベースにしており、データバインディングを動作させようとしています。理想的には、自分のデータとテキストボックスのハッシュテーブルをプロパティにバインドして、テキストボックスに入力するとハッシュテーブルが更新され、ハッシュテーブルが更新されてテキストボックスが更新されるようにしたいと思います。またはそれに近似した何か。PowerShellとShowUIの基本的なデータバインディングの例 - 全く機能しません

ipmo showui 

StackPanel { 
    label -name "a" -Content { binding -ElementBinding b -path Text } 
    Textbox -name "b" 
} -Show 

をし、私が取得することは現れてUIですが、タイピングは何も変わりません:

私はWPFのデータバインディングの周りに私の方法を知らない、私はこのようなものをしようとしています。私はかなり多くの試行錯誤のバリエーションを試しました - Textbox -Text { binding... }の代わりにTextBoxのバインディングを設定するか、ElementBindingの代わりにbinding -Source aのような構文を使用して両方のバインディングを設定し、binding -Source $aを-DataContextsテキストボックスまたは親スタックパネル上で、コマンドのさまざまな場所でデフォルト値を使用したり使用したりせずに試してください。私は、ハッシュテーブルを更新し、ハッシュテーブルをバインドしようとするイベントハンドラ、またはPSCustomObjectでbuttonを使用しようとしました。テキストボックスをスライダ値にバインドする - 多くの試行錯誤がありますが、結果はありません。

ShowUI hereにデータバインディングの例があります。これは、コマンドのヘルプをリストに入れて、それを実行します。これは正常に動作します。 first example hereは、フォルダ内に写真がある限り、正常に動作します。これらは、ShowUIがデータバインディングを扱うことができると思っています。そして、足場や初期化コードはありません。

this C# tutorialに従い、SHOWUIにほとんど文字通りポートにそれをしようと、私はこれを取得:

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 

そしてUIが表示され、データはありません。ボタンをクリックすると.がコンソールに書き込まれますが、テキストボックスは更新されません。

私はPowerShell 4を使用していますので、Githubの最新のShowUI 1.5(私は思っています)のdevブランチを直接使用することはできません。 [編集:これは少なくとも私の問題の一部であり、実際にあるコンピュータで古いバージョンと別のバージョンで新しいバージョンを使用していた]

私は何が間違っていると思いますか?

+0

'$ stuinfo'を' $ This'で置き換えようとしましたか? Ex。 '$ This.DataContext = $ s' – boeprox

+0

@boeproxx私はそれを試していなかったが、私は今ある - と違いを見ることができません。 – TessellatingHeckler

答えて

1

私はこの前にShowUIを使ったことがありませんでした。だから、私はそれをダウンロードし、上記のスクリプトを試しました。私はあなたと同じ結果を得ました。 On_Loadedメソッドの$ s変数がnullであることがわかりました。 $ sの2つのインスタンスを$ globalに変更すると、次のようになります。

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 

初めてのスクリプトでは、動作する要素にバインドできませんでした。私はDataContextを使ってそれらをリンクしてみました。最初にプロパティにバインドするものは、それを更新できる唯一のアイテムだと思われます。だから、テキストボックスが最初の場合はそれが働いたが、ラベルが最初の場合は動作しませんでした。

作品:

ipmo showui 

$dc = [pscustomobject]@{ myText="my text" } 

StackPanel { 
    Textbox -Text {Binding -Path myText -UpdateSourceTrigger PropertyChanged} 
    Label -Content {Binding -Path myText} 
} -Show -DataContext @($dc) 

$dc 

は動作しませんでした:

ipmo showui 

$dc = [pscustomobject]@{ myText="my text" } 

StackPanel { 
    Label -Content {Binding -Path myText} 
    Textbox -Text {Binding -Path myText -UpdateSourceTrigger PropertyChanged} 
} -Show -DataContext @($dc) 

$dc 

私は、これはあなたのいくつかの役に立てば幸い... SHOWUIは便利なツールが、IDKになるようにそれはそう、バギーようです。

+0

変数スコープについてよく調べてください。私はそれを試みたが、私にとってはうまくいかなかった。周りを見回って、ShowUIを私の他のコンピュータで更新しただけであることを認識した。これは2013年のバージョンを実行している。はい、更新されたShowUIでは、あなたの作業例がうまくいきます - ありがとうございます。私は少し質問を開いたままにしておきます。これは他の回答のチャンスですが、これは良いことです。 – TessellatingHeckler

関連する問題