8K Views
June 03, 23
スライド概要
Windows フォームアプリのデータバインディング
mishizaki
デスクトップアプリ の話 2023 .NET の 3 日間 ~3 コミュニティ合同イベント~ 石崎 充良 1 / 31
自己紹介 石崎 充良 ( @mishi_cs ) C# Tokyo コミュニティ管理メンバー GitHub: https://github.com/m-ishizaki blog: https://rksoftware.hatenablog.com/ 2 / 31
今日はデスクトップアプリのお話です デスクトップアプリ、 使っていますか? 3 / 31
アプリの種類(雑) アプリの種類 デスクトップ モバイル Web WebAssembly VR ヘッドセット 4 / 31
アプリの種類(雑) アプリの種類 デスクトップ モバイル Web WebAssembly VR ヘッドセット アプリの種類 Office とか ゲームとか VR とか エディタとか ブラウザとか 業務アプリとか 5 / 31
アプリの種類(雑) アプリの種類 Office とか ゲームとか VR とか エディタとか ブラウザとか 業務アプリとか アプリの種類 WinUI WPF Blazor MAUI Windows フォーム 6 / 31
皆さんの関心事 アプリの種類 Office とか ゲームとか VR とか エディタとか ブラウザとか 業務アプリとか アプリの種類 WinUI WPF Blazor MAUI Windows フォーム 7 / 31
ブログ記事 (私の) 8 / 31
去年度からの私のブログでの記事数 検索ワード forms winui wpf maui blazor 記事ヒット数 26 27 24 27 18 https://rksoftware.hatenablog.com/ 9 / 31
皆さんの関心事 アプリの種類 WinUI WPF Blazor MAUI Windows フォーム 話題 粛々と実装が進む 粛々と使われている WebAssembly モバイル 実装の進捗がアッピールされる 10 / 31
どんなことを書いていたのか 話題 Blazor Microsoft Build Uno Platform WinUI MAUI (WinForms)データバインディング Visual Studio のアップデート 記事ヒット数 6 1 1 2 1 11 2 11 / 31
データ バインディング 12 / 31
データバインディングとは 現役の UI を持つ .NET アプリでは (Windows フォームアプリを除いて) 標準装備で基本 技術として使われるもの。 アプリの「UI」と「データ・ロジック」の結合を疎にできるため、プログラムが作りや すくなる(※効果には個人差があります)。 データバインディングを 使用しない伝統的コード例 テストの際には UI に温かみのある手操作で 入力→ボタン押下→結果を目視 この計算式が正しいと確認できる数 値パターンを手操作と目視でテスト 13 / 31
データバインディングとは 現役の UI を持つ .NET アプリでは (Windows フォームアプリを除いて) 標準装備で基本 技術として使われるもの。 アプリの「UI」と「データ・ロジック」の結合を疎にできるため、プログラムが作りや すくなる(※効果には個人差があります)。 データバインディングを 使用しない伝統的コード例 テストの際には UI に温かみのある手操作で 入力→ボタン押下→結果を目視 この計算式が正しいと確認できる数 値パターンを手操作と目視でテスト 14 / 31
データバインディングコード このクラスはテストできる 15 / 31
Windows フォーム アプリの データバインディング 16 / 31
UI デザイナーで設定可能 プロジェクト内の (条件に合っ た) クラスが自動で列挙される 17 / 31
バインディングする プロパティを選択 ボタンの Command もバインディング (ボタンの押下処理) 18 / 31
こんなコードが生み出されます でも、動かない 動いた! これを書き足す 19 / 31
BindingSource Windows フォームのコントロールにはデータバインディングのソースを設定する DataContext というプロパティがある。 UI の要素の親子で伝播してくれるものの、何もしてくれない。 Form の DataContext へのセットが 子の TextBox へもセットされている バインディングされている ViewModel に影響なし 20 / 31
BindingSource の DataSource BindingSource の DataSource に 別の ViewModel をセット TextBox、Label、Button すべての データソースが変わった! 21 / 31
デザイナーでなくコードの場合 こんな感じのコードで良いのでは リテラルでなく nameof するのも good! 22 / 31
ViewModel のセット 23 / 31
直接 ViewModel をセットしても動く 動く! BindingSource を使っても 1 行増えるだけだしメリットもある メリット:うわさの一括差し替え 24 / 31
対応している コントロール 25 / 31
一部はプレビュー機能の設定が必要 エラーが表示されている .csproj ファイルで 「プレビュー機能を有効」 設定すれば解消 26 / 31
Control と BindableComponent クラス Control クラス (とその 導出/派生/サブ/子 クラス) と BindableComponent クラス (同 様) にデータバインディング用プロパティが実装されている。 https://learn.microsoft.com/ja-jp/dotnet/api/system.windows.forms.control?view=windowsdesktop-8.0 https://learn.microsoft.com/ja-jp/dotnet/api/system.windows.forms.bindablecomponent?view=windowsdesktop-8.0 27 / 31
色々な対応コントロール https://learn.microsoft.com/ja-jp/dotnet/api/system.windows.forms.containercontrol?view=windowsdesktop-8.0 https://learn.microsoft.com/ja-jp/dotnet/api/system.windows.forms.scrollablecontrol?view=windowsdesktop-8.0 28 / 31
まとめ 29 / 31
まとめ ⚫ Windows フォームアプリは注力され進化している ⚫ Windows フォームアプリ使いは今すぐデータバインディン グ! ⚫ 上司やメンバーの説得は自己責任で 30 / 31
ありがとうございました。 【オンライン】2023年! C# Tokyo イベント 石崎 充良 31 / 31