良い題名が浮かばなかったので、やったことをそのままダラダラと題名にしています。
Powershellでちょっとしたフォームを作りたいので、その勉強のために作成したサンプルです。
Xamlちょっと面白いかも。
PowershellでINotifyPropertyChanged
Xamlの INotifyPropertyChanged のコツは、potimarimo – Qiita さんのサイトを参考にExpandoObjectを使用。
まず、Xaml上は、FirstName と LastName を定義しbinding
<TextBox Name="FirstName" Text="{Binding FirstName, UpdateSourceTrigger=PropertyChanged}" />
<TextBox Name="LastName" Text="{Binding LastName, UpdateSourceTrigger=PropertyChanged}" />
Powershellでは、ExpandoObjectを生成、FirstName/LastNameをメンバーを追加した後に、Xamlファイルを元にWindowフォーム化したオブジェクトにExpandoObjectをDataContextさせている。
これにより、FirstName1/LastName1 と FirstName2/LastName2が連動する仕組みになっている。
フォーム上で文字列結合
ここは、PowershellというよりもXamlの流儀で対応する。
まずFirstName1とLastName1を構成するTextBoxにそれぞれ名前つける。FirstName1用のTextBoxには、NameにFirstName、LastName1用のTextBoxのNameにLastNameを指定する。
次にMultiBindingを指定。
MultiBindingに、Binding 先となる「TextBoxの」Text、引用先となるElementNameにFirstName/LastNameを指定。
肝になる部分は以下
・・・
<TextBox Name="FirstName" Text="{Binding FirstName, UpdateSourceTrigger=PropertyChanged}" />
・・・
<TextBox Name="LastName" Text="{Binding LastName, UpdateSourceTrigger=PropertyChanged}" />
・・・
<MultiBinding StringFormat="{}{0} {1}">
<Binding Path="Text" ElementName="FirstName" />
<Binding Path="Text" ElementName="LastName" />
</MultiBinding>
参考
実行結果例
起動時

Taro papanda と入力した場合
FirstName1やLastName1 FirsName2やLastName2を個々に変更してもすべて同期する。
更に、Join FirstName And LastName に FirsName や LastName が結合された文字列が出現する。

参考にさせて頂いたサイト
PowerShellでWPFを使う #PowerShell – Qiita
C#WPFの道#2!StackPanelの使い方をわかりやすく解説!|ピーコックアンダーソン (anderson02.com)
コメント