質問: person.PersonName; だが、これだと新規の名前(null)になる。 } } } ```
回答: まず、確認したいのですが、WPFを使ってアプリケーションを作成しようとしているのは、見栄えのいいアプリケーションを作りたいだけでしょうか?もしそうならModelをグローバルに持ってどこからでもアクセスできようにしてでも全然構いません。MVVMにこだわる必要はないと思います。 次に、WPFを使いMVVMで作りたいということ(+見栄えのいいアプリケーションでももちろんOK)であれば、ViewModel抜きでば考えられません。この場合、まずViewModelクラス(DependencyObjectの派生クラス)を作ります。クラス名は何でもいいです。次にViewModelクラスにModelを持たせるようにします。プロパティでもフィールドでもいいです。その上で、ViewModelクラスのインスタンスをMainWindowのコンストラクターでDataContextプロパティに設定し、さらに他のWindowを作成する際にこのViewModelのインスタンスを各WindowのDataContextに設定します。これですべてのWindowからModelにアクセスできるようになります。(ここまでなんとなくわかりますよね?...すみません、C#とかはわかるつもりで書いてますので) でも、これだけだとMVVMになってません。MもVもVMも存在しますがつながってない...で、ここからが依存関係プロパティの出番です。たとえば、Modelが変更されたら、各Windowが変更されたことの通知をもらって表示するとか必要になります。これをイベントで処理することも可能ですが、WPFだとViewModelとWindow側に依存関係プロパティを持たせて、それをBindingしてつなぎます。こうした状態でModelを変更したら、同時にViewModelの依存関係プロパティを変更することでWindowにも変更が通知されることになります。非常におおざっぱですが、これで非常に簡単なMVVMになります。 と、ざっと書きましたがたぶん、これでわかるとは思いません。実のところこWPFを始める頃にはだれでも悩むところなのです(私もさんざん悩みました)。ただ、なんとなくViewModelを書いてみて、依存関係プロパティを作ってBindingして...とやってるうちに、おぉ、これか!と悟りを開いた感じになりした(大げさですが)。ともかく、MVVMでということならまずViewModelです。そして依存関係プロパティ、Binding、とやってみてください。詳細はWebを検索すると例は沢山あると思います。がんばってください。