Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
WPFで実践アプリ開発! 第四章 機能の実装 Part 2
Search
Ryosuke Uchiyama
June 04, 2021
Technology
64
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
WPFで実践アプリ開発! 第四章 機能の実装 Part 2
Ryosuke Uchiyama
June 04, 2021
Transcript
26 slides
WPFで実践アプリ開発! 第四章 機能の実装 Part 2 Ryosuke Uchiyama step63r
ToDoWpf • やることリストを表示するアプリケーション • 「やること」を追加、削除、編集する機能 • 期日や優先度でソートする機能 • 期限切れを可視化する機能 •
通知領域に常駐する機能 • 詳細メモを登録する機能 • and so on... 前 回 の あ ら す じ
UIとロジックを分離するためのソフトウェアアーキテクチャパターン • Model • アプリケーションのデータと手続き(ビジネス ロジック)を表現する • Modelの情報はViewModelを介してViewへ伝達 される •
Model自身はViewの描画を知らない(知る必要 がない) • View • UIへの入力とUIからの出力を担当する • ViewModelに含まれたデータをデータバイン ディング機構などによって自動的に描画する • Viewそのものに複雑なロジックは含まない • ViewModel • ViewとModelの間の情報伝達を担当する • ViewModelの変更は自動的にViewへ反映される 前 回 の あ ら す じ
アプリケーション設定 // 設定値の保存 Properties.Settings.Default.SomeValue = "This is a setting value";
Properties.Settings.Default.Save(); // 設定値の読み込み string someValue = Properties.Settings.Default.SomeValue; 前 回 の あ ら す じ
期限超過かどうかを判定する ValueConverterクラスを作成 internal class IsPastDayConverter : IValueConverter { public object
Convert(object value, Type targetType, object parameter, CultureInfo culture) { // データ -> 表示データへの変換 } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { // 表示データ -> データへの変換 } } スタイルで実装 <DataTrigger Binding="{Binding Path=DueDate, Converter={StaticResource IsPastDayConverter}}" Value="True"> <Setter Property ... /> </DataTrigger> 前 回 の あ ら す じ
ソースコード step63r/ToDoWpf https://github.com/step63r/ToDoWpf
UIを実装する #84c500a MVVM化する #bda66d5 タスクの保存機能を実装する #eac821a タスクの削除機能を実装する #6ee9fba タスクをモデル化する #ef5baef
期限や優先度を可視化する #6c7e455 常駐機能を実装する #e9da2b9 ウィンドウ設定を保存する #e39d551 詳細メモを登録できるようにする #9e734f9 step63r/ToDoWpf コードビハインドで最低限のロジックを実装する #91176b6
Hardcodet.NotifyIcon.Wpf https://github.com/hardcodet/wpf-notifyicon
通知領域の実装
アプリケーション終了のキャンセル
通知領域のメニューイベント
UIを実装する #84c500a MVVM化する #bda66d5 タスクの保存機能を実装する #eac821a タスクの削除機能を実装する #6ee9fba タスクをモデル化する #ef5baef
期限や優先度を可視化する #6c7e455 常駐機能を実装する #e9da2b9 ウィンドウ設定を保存する #e39d551 詳細メモを登録できるようにする #9e734f9 step63r/ToDoWpf コードビハインドで最低限のロジックを実装する #91176b6
ウィンドウサイズの保存と復元
ウィンドウ領域 プライマリ モニター セカンダリ モニター
ウィンドウ領域 - WorkArea プライマリ モニター セカンダリ モニター WorkArea
ウィンドウ領域 - PrimaryScreen プライマリ モニター セカンダリ モニター PrimaryScreen
ウィンドウ領域 - VirtualScreen プライマリ モニター セカンダリ モニター VirtualScreen VirtualScreen
UIを実装する #84c500a MVVM化する #bda66d5 タスクの保存機能を実装する #eac821a タスクの削除機能を実装する #6ee9fba タスクをモデル化する #ef5baef
期限や優先度を可視化する #6c7e455 常駐機能を実装する #e9da2b9 ウィンドウ設定を保存する #e39d551 詳細メモを登録できるようにする #9e734f9 step63r/ToDoWpf コードビハインドで最低限のロジックを実装する #91176b6
新規作成、編集のダイアログを作る MainWindowView TaskDialogView
ダイアログ表示方法の検討 • Prism.Wpf(MVVM)で気軽にMessageBoxをShowしたい – Qiita • MVVMな設計でVMからダイアログ表示を行う - SourceChord •
MVVMでViewModelから別ウィンドウ表示をするサンプル~シンプルなTODOリスト~ - SourceChord • MVVMでダイアログを表示したいときどうする? - present • 【WPF】MessageBoxを自作してViewModelから表示する | IT記録 • MVVMでファイルを開くダイアログを使う(View完結とViewModel経由) - かずきのBlog@hatena • MVVM的に真っ当にMessageBoxを表示する - 銀の弾丸 Messangerパターン ビヘイビア サービスインジェクション DataTrigger Interaction Request
今回の設計指針 – ウィンドウを開く MVVMな設計でVMからダイアログ表示を行う - SourceChord (hatenablog.com)
今回の設計指針 – ウィンドウを閉じる VMからウィンドウを閉じる添付ビヘイビア - SourceChord (hatenablog.com)
POINT ウィンドウ(親)は自分が開くダイアログ(子)を知っている ダイアログ(子)は自分を開いたウィンドウ(親)を知らない
まとめ
MVVMパターンを使ったWPF開発 • Windowsアプリ開発はWin32から着実に進化を遂げてきた • WPFはデータの双方向バインドに特化したフレームワーク • MVVMパターンを使うとUIとロジックを分離した設計ができる • UI/ロジックの分離により、UI改善、機能追加、テストが簡単になる •
WPFではUI要素を柔軟にカスタマイズできる • Windowsに特化したアプリ開発はWPFを最後に幕を閉じた • これからはWebとマルチプラットフォームが台頭すると思われる
None
More Decks by Ryosuke Uchiyama
See All by Ryosuke Uchiyama
AWSでサーバレスな書籍管理アプリを作る
step63r
0
78
PythonでSlack通知botを作る
step63r
0
25
ChatGPT実践
step63r
1
420
IoT実践! 行先予定表を電子ペーパーで作る
step63r
0
60
React x Socket.ioで人狼サーバを作る 第一章 フロントエンド実装
step63r
0
39
深層強化学習で東方AI 第一章 DQNの基本
step63r
0
450
Build 2021 プレイバック
step63r
0
46
WPFで実践アプリ開発! 第三章 機能の実装 Part 1
step63r
0
140
WPFで実践アプリ開発! 第二章 UI
step63r
0
200
Other Decks in Technology
See All in Technology
2026-11-11 Tamachi.sre#7 PaCにインフラリソースの命を救われました。 / PaC saves the infra resource life
masasuzu
1
180
自治体AIコンタクトセンター、何をどこに任せる?~Amazon Connect Customer +Amazon Bedrockの実践知~ / 20261107 Satoshi Torano
shift_evolve
PRO
1
140
AI時代における医療情報システムのセキュリティ / Security of Healthcare IT Systems in the AI Era
henryofficial
0
170
複数システムが同居した 15 年物の AWS アカウントを解体するための考古学
wa6sn
3
150
顧客合意を取りながら進めるAWSコスト削減の実践
optim
0
170
An Introduction to Context Ontology Accelerator (teaching AI agents what your data means)
inariku
PRO
1
270
「任されビリティ」で引き受けて「よしなりてぃ」に頼らず任せる / Accept tasks with "makasarebility" and hand them over without relying on "yoshinarily"
pauli
0
600
高品質と高スピードを支える品質のシフトレフトのアプローチ
goyoki
4
1.2k
閉域網でのAPI公開の選択肢全部比較!
takano0131
2
180
大江戸Ruby会議でデータベース クライアントの話をするのは 間違っているだろうか
yahonda
1
130
Kiro Web 入門 (サインインから、頼み方、PR の受け取り、クラウドの決まりまで) | 目指せ Kiro マスター 04
inariku
PRO
2
120
おうち環境でも「なるべく止めたくない!」 ― おうち環境の機器冗長化の理想と現実
yuutosi
1
280
Featured
See All Featured
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
680
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
570
From π to Pie charts
rasagy
1
450
The browser strikes back
jonoalderson
0
1.9k
Why Our Code Smells
bkeepers
PRO
340
58k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
48k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1.1k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
2
400
30 Presentation Tips
portentint
PRO
1
470