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

文書情報

記事タイトル
Powershell WPF ExpandoObjectを使ったINotifyPropertyChangedの実装、XamlのMultiBindingによる文字列結合サンプル
作成日
更新日
Source URL
https://papanda925.com/?p=2611

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

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