Powershell WPF ExpandoObjectを使ったINotifyPropertyChangedの実装、XamlのMultiBindingによる文字列結合サンプル

PowerShell

良い題名が浮かばなかったので、やったことをそのままダラダラと題名にしています。

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)

MultiBindingの使い方と使いどころ – じょいのーと (hatenablog.com)

PowerShell WPF XAML multibinding datacontext template example – Part 4 | vGeek – Tales from real IT system Administration environment (vcloud-lab.com)

XAML の概要 – WPF .NET | Microsoft Learn

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

タイトルとURLをコピーしました