antsk blog

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

MVVMでViewModelからダイアログを扱いたい・続き

昨日の続き。

ViewModelRelation.Register(viewModel, view);
……ってのはviewにWPFオブジェクトを想定してるんだから
添付プロパティとして表現すれば簡単に使えそうだなー、と思って実装。

MVVM_Util.mp3
※ 例によって拡張子を変えてアップしてる

クラス名を ViewModelManagerということにして、
ViewModel添付プロパティを設定するとRegister()メソッドを呼ぶようにしてみた。

こんな感じで使う。

<Window ViewModelManager.ViewModel="{Binding RelativeSource={RelativeSource Self}, Path=DataContext}" .../>


……これ使うときってほとんど絶対にこの形だなー、と思ったので
省略用にViewModelPathもついでに追加。

<Window ViewModelManager.ViewModelPath="DataContext" .../>

で上と同じ。

これでDataContextに設定したViewModelからViewであるWindowが得られるようになる。

さて、実際に使ってみてた感じ……予想外に便利。
というか、ちと危険な便利さだなぁ。

ViewModelからViewが取れるようになったから

<Window
ViewModelManager.ViewModelPath="DataContext" >
<MyUserControl
DataContext="{Binding Path=Property1} "
ViewModelManager.ViewModelPath="DataContext"
/>
</Window>

みたいなパターンで、

本来WindowのViewModelにアクセスできなかった
MyUserControlのViewModelが
 自分のView(MyUserControl)を取得
  → Window.GetWindowで親を取得
   → WindowのViewModelを取得
て形で簡単に取り出せてしまう。

これではWindowのViewModelはほとんどグローバル変数だ……
ってstaticに保存してるんだから当然なんだけどさ。

まあ、もともと親子関係にあるオブジェクトで子から親を参照できるようになっただけだから
「そういうことはあんまりしないでね」とか言っとくだけでいいかなぁ。

とはいえ、これでとりあえず
Windowの基本機能を呼び出したり
ダイアログを表示したりするラッパーを作れば
ある程度テスト可能な状態を維持しつつ
VM側からViewを操作できそうかな?

スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2009/09/05(土) 00:17:25|
  2. WPF
  3. | トラックバック:0
  4. | コメント:0
<<WPFパネルの使い方まとめ | ホーム | MVVMでViewModelからダイアログを扱いたい>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://antsk.blog99.fc2.com/tb.php/6-0dccc047
この記事にトラックバックする(FC2ブログユーザー)

プロフィール

antsk

Author:antsk
主にC#のプログラマ。

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

未分類 (0)
.net (1)
WPF (8)

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

ブロとも申請フォーム

この人とブロともになる

QRコード

QRコード

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。