MVVM入門 その3「ViewModelからViewを操作する」

概要前回までで、基本的な四則演算アプリケーションが出来上がりました。今回は、MVVMパターンをやる上で多くの人が躓くであろうViewModelからViewを操作する方法と、ViewModelからViewを操作した結果をViewModelで受け取る方法について紹介します。今回のサンプルプログラムは以下のような動きをします。普通に計算出来るときは今までと同じ動き右辺値を0に指定して割り算を実行すると、計算結果が実数ではなくなったとダイアログが表示されます。キャンセルを押すと、四則演算アプリケーションはそのままですが、OKを押すと以下のように入力内容が初期化さ

C# (176.7 KB)
 
 
 
 
 
4.8 Star
(4)
2,243 times
Add to favorites
5/30/2011
E-mail Twitter del.icio.us Digg Facebook
Sign in to ask a question


  • ComboBoxのSelectedItemについて
    4 Posts | Last post May 10, 2012
    • いつも拝見させていただいてます。
      大変参考になり助かっています。
      
      ところでこのサンプルの通りに作成してみましたが、
      MessageBox表示後、ComboBoxの表示が未選択に戻りません。
      
      その他のTextBoxは初期値に戻ります。
      ComboBoxも表示が変わらないだけでSelectedItem自体は未選択に
      戻っていました。
      
      デバッグしてみても、ちゃんとRaisePropertyChangedも呼び出されています。
      
      なにか原因があるのでしょうか?
      
      
    • QAありがとうございます。
      サンプルをダウンロードして確認してみましたが.NET Framework 4 Client Profileの環境ではうまく動いています。yukiotokoさんの環境は.NET Frameworkのバージョンいくつでしょうか?
      
      
    • 回答いただきありがとうございます。
      
      .NET Frameworkのバージョンは同じく.NET Framework4 Client Profileです。
      
      私もサンプルをダウンロードし動作させたらうまく動いていたので自分のコードを
      もっと調べてみたところ解決しました。
      
      すみません。どうやら私のコードの書き方が悪かったようです。
      私は、割と初心者のVBプログラマーなので、C#を翻訳しながらVBに書き換えていたところ、
      CalculateTypeViewModelのCreate()メソッドでVBにはない yield return がでてきたため、
      私はLinqの遅延実行を使用して代用しようと考えてしまいました。(何かの書籍に代用できると書いてあった気がしたので)
      どうやら、意味が違ったようでした。(?)
      
      Create()メソッドは新しいCalculateTypeViewModelのインスタンスを作成しているので、
      ためしにMainViewModelのCalculateTypesプロパティの内部変数にコンストラクタ内で
      インスタンスを作成し、保持させたところ、正しく動作しました。
      
      もしよろしかったら、かずき_okazukiさんでしたら、VBを使用した場合どんな風に
      作成されるか教えていただけないでしょうか?
      
    • 重ねて謝罪させてください。
      どうやら、私がMainViewModelのコンストラクタ内の
      CalculateTypesViewModel.Create()のあとの.ToArray()を
      見落としていたのが悪かったようでした。
      
      大変申し訳ありませんでした。