WPFに再度挑戦
WPFを勉強する過程で出会ったキーワードたち
- XAML
- MVVM
- MVVM Framework
- Prism
- ReactiveProperty
- CommunityToolkit.Mvvm
- Binding
- Command
- Messaging
- DI
- IoC
- SOLID原則
MVVM
-
フリー百科事典『ウィキペディア(Wikipedia)』
Model View ViewModel -
@IT 「.NET開発者中心 厳選ブログ記事」シリーズ
MVVMパターンの常識 ― 「M」「V」「VM」の役割とは? -
showeryのブログ
WPF MVVMパターン-M・V・VMの役割 -
the sea of fertility
MVVMのModelにまつわる誤解 ※記事内のスライドも必読 -
MSDN Magazine Issues 2009 February
Model-View-ViewModel デザイン パターンによる WPF アプリケーション
WPF
-
@IT > アジャイル/DevOps > Insider.NET > 業務アプリInsider > 連載:WPF入門
連載:WPF入門 -
かずきのBlog@hatena WPF4.5入門
WPF4.5入門 その62「まとめ」 -
Zenn WPF 入門(.NET 6 対応版)
WPF 入門 -
Microsoft のテクニカル ドキュメント > .NET > デスクトップ ガイド
Windows Presentation Foundation のドキュメント -
++C++; // 未確認飛行 C > .NET > クラスライブラリ
Windows Presentation Foundation
C#
岩永さんのサイト
山田さんの書籍
XAML
-
Microsoft のテクニカル ドキュメント > Visual Studio > IDE
XAML ツールのドキュメント -
@IT > Insider.NET > 業務アプリInsider > 特集:XAMLファミリ共通開発のすゝめ(前編)
Windows 8時代のGUI開発を考える -
@IT > Insider.NET > 業務アプリInsider > 特集:XAMLファミリ共通開発のすゝめ(後編)
MVVMパターンを使ったクロス・ターゲット開発 -
@IT > Insider.NET > 業務アプリInsider > 連載:次世代技術につながるSilverlight入門 > Silverlightアプリの作り方
Silverlightアプリの作り方
CommunityToolkit.Mvvm
-
Microsoft のテクニカル ドキュメント > Windows > Windows Community Toolkit
Introduction to the MVVM Toolkit -
GitHub
CommunityToolkit / dotnet
CommunityToolkit / MVVM-Samples -
Qiita
.NET standard2.x時代のMVVMライブラリ
.NET用 MVVM Toolkit v8でMVVMコードを短く
View、ViewModel間のやり取り
View ⇔ ViewModel
- データ・バインディング機構
- INotifyPropertyChanged
- 名前空間:Microsoft.Toolkit.Mvvm.ComponentModel
- ObservableObject
-
ViewModelとコードビハインドを通じて対話してはいけません。
-
Viewは、データ・バインディング機構を使ってViewModelの各プロパティの値を表示します。
-
XAMLだけでは足りない機能は、別途、ビヘイビア、トリガー、アクションを作成して対処します。
-
Modelの公開するステートをいちいちラップしてViewに公開するのもViewModelの役目です。
View → ViewModel
- コマンド
- ICommand
- 名前空間:Microsoft.Toolkit.Mvvm.Input
- RelayCommand
-
コマンドとは、Viewに公開する操作のことです。
-
ICommandインターフェイスの実装であるコマンドは、ViewModelのプロパティとして公開されます。
-
データ・バインディング経由でViewから操作されます。
-
コマンドは「メソッド」の公開ではなく、まさに「操作」の公開なのです。
View ← ViewModel
- Messenger
- Messenger
- 名前空間:Microsoft.Toolkit.Mvvm.Messaging
- WeakReferenceMessenger
-
データ・バインディング機構の応用によってViewModelからViewを操作する機構
-
ViewModelはMessengerからメッセージ・イベントを発行します。
-
ViewはViewModelのMessengerをあらかじめ監視していて、発行されたメッセージに対応したアクションを行えるという仕組みです。
-
本質的にダイアログや画面遷移は揮発性の現象です
-
ViewModel上に、Viewへの揮発性の現象をイベントによって通知する専用のオブジェクトがあればよい
-
Messenger方式は、結局はデータ・バインディング機構の思想とまったく同じものです。
- データバインディングは、揮発性の現象をViewModel→Viewに変更通知することに向かないので揮発性の現象を通知するためにMessenger機構を使用するが、思想的には、データバインディングと同じものであり、実装方法が異なるだけである。
引用元
-
@IT 「.NET開発者中心 厳選ブログ記事」シリーズ
MVVMパターンの常識 ― 「M」「V」「VM」の役割とは? -
the sea of fertility
MVVMのModelにまつわる誤解 ※記事内のスライドも必読
ViewModel、Model間のやり取り
ViewModel ⇔ Model
- Binding
-
Modelの公開するステートをいちいちラップしてViewに公開するのもViewModelの役目です。
-
Modelは変更通知機能を持ちます。ViewModelと同じように、INotifyPropertyChangedインターフェイスの実装として行われます。
ViewModel → Model
- 返り値のない関数呼び出し
ViewModel ← Model
- Messaging
基本的考え
-
ViewModelはModelの影
-
ModelについてViewModelが行うことは、イベントに対する反応と戻り値のないメソッドの呼び出ししかない事
-
ViewModelはModelの影。この考え方が徹底されていれば、
- Modelの呼び出し
- Modelの呼び出し結果によるModel内状態の変化とそれに伴う変更通知イベント
- Modelの呼び出しによる異常系発生が引き起こすModel内異常系通知イベント
- Modelが発生させるその他イベント
これらはみなModelの外からは切り離されて見える別々の事象
引用元
-
@IT 「.NET開発者中心 厳選ブログ記事」シリーズ
MVVMパターンの常識 ― 「M」「V」「VM」の役割とは? -
the sea of fertility
MVVMのModelにまつわる誤解 ※記事内のスライドも必読
コードビハインドに書いていいもの(書くしかないもの)
- IComponentConnector.InitializeComponent メソッド
内部的に使用されるコードのため必須
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.markup.icomponentconnector.initializecomponent?view=windowsdesktop-6.0 - DataContextへの定義
XAMLでは、引数有りのコンストラクタを指定できないため、ViewModelにDIコンテナを利用する場合は、コードビハインドにて登録する。
public partial class MainWindow : Window
{
public MainWindow()
{
//1.IComponentConnector.InitializeComponent メソッド
InitializeComponent();
//2. DataContextへの定義(ViewModelにDIコンテナを利用する場合)
DataContext = Ioc.Default.GetRequiredService<MainWindowViewModel>();
}
}
未解決問題
- XDG0062 The service provider has not been configured yet
とりあえずほっとく。
いろんな人の声
-
とりあえずなんでもかんでもコンテナ管理はやめておいたほうがいいです。
コンテナ管理のメリットが得られる場面で適切に使用するようにと理解。
コンテナ管理のメリットが得られない場面で使用しても無意味。
そのためにコンテナ管理することの意味をよく理解することが必要。
証憑データ管理ソフト
会社の経理をもやっています。小さい会社なのでいろいろやらないといけないのですが、