MVVM

Livetによる画面遷移と選択要素受け渡しのサンプル

MVVMパターンでよく問題となるのが、画面遷移 の問題です。 単一画面であれば、View と ViewModel をバインド機構を使って疎結合にできるため、なんら問題は生じませんが、画面遷移を行う場合、ViewModel から Window を起動すると View - ViewModel 間で密…

WPF で画面とユーザーコントロールの連携を考えてみた

ちょっと某所で質疑があがってたので、MVVMパターンにおける画面とユーザーコントロールの連携について考えてみました。 お題をかいつまんで言えば、こんな話です。 メインウィンドウと二つのユーザーコントロールが存在し、それぞれプロジェクトを分けて管…

VisualBasic で Livet の LivetWeakEventListener を使う

先日来、某所で WeakEvent パターンの話題があがってます。そこで Livet の弱参照パターンの話もちょろっとしてみたわけですが・・・でも VBユーザーだとどうだろう・・・VBユーザーの多くはラムダ式馴染みないし、EventHandler をパラメータで渡すコードが…

BackgroundWorker を使用して進行状況ダイアログを作成する(WPF & Livet版)

必要に迫られ、DOBON.NET さんの以下の記事BackgroundWorkerクラスを使用して進行状況ダイアログを作成するを参考に、WPF & Livet で進行状況ダイアログを作ってみました。 ダイアログは Forms からも呼び出せることを想定したインターフェイスになってます…

WPF の Dispatcher について勉強してみた(XPでの描画遅延回避編)

XP での描画遅延の問題(Button の Enable/Disableが切り替わらない)を回避するのに、自前の RelayCommand を以下のように実装してみました。 /// <summary> /// 現在の状態でこの RelayCommand を実行できるかどうかを判断します。 /// </summary> public bool CanExecute(obj…

WPF の Dispatcher について勉強してみた

WPF の Dispatcher について勉強がてら自分なりに得た理解をまとめてみました。WPF アプリケーションは、レンダリング(描画)用とユーザーインターフェイス用の2つのスレッドを用いて動作します。 レンダリングスレッドはバックグラウンド動作のため、開発…

Livet をカスタマイズする(1.0.6.1版 VB.NET用)

以前のエントリからだいぶ日にちが経ち、Livet も 1.0.6.1 と大きくバージョンアップしました。それに伴い仕様も大きく変わり、VB ユーザーには少々使いづらくなったので、以前の改造だけじゃ足りない部分も増えてます。そこで最新バージョンに合わせ、Livet…

Q078. TextBoxの入力をカナや英数だけに制限したいが簡単な方法はないか

A.自分でロジックを組むこともできますが、GrapeCity の WPFコンポーネント InputMan for WPF に含まれている GcTextBox を使えば、入力制限を簡単に設定できます。InputMan for Windows Forms で長年培われた日本語入力技術がこのコンポーネントにも反映さ…

Livet の ViewModelCommand.RaiseCanExecuteChanged

Livet の Command クラス、ViewModelCommand で CanExecuteChanged メソッドが呼ばれるタイミングが判らないとのコメントを頂きました。 プロパティの状態によってコマンドの有効・無効を制御したいなら、セッター内で ViewModelCommand.RaiseCanExecuteChan…

MVVM における View・ViewModel・Model のサイズについて、クラウディアさんを使って表現してみた

今朝、ツイッターでこんなやりとりがありました。 window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementById(id)) return t; js = d.createElement(s); js.id = id; js.src = "http…

MVPVMパターン(その弐)

ここ最近、MVVM をプロジェクトにスムーズに導入できない問題に関してずっと考えてました。MVVM をうまく摘要できないケースを大別すると、以下の三つに分類できるのではないでしょうか? そもそもパターンが何か判らない。 適切なインフラを使用しない、も…

MVPVM パターン

最近俄かに出てきたのが、この MVPVM というパターン。MVVM をより発展させたパターンらしいです。図にするとざっとこんな感じらしい。 現状日本語で詳しく解説してるのは、MSDN マガジンの記事だけ。もっとも原文は英語なので、若干翻訳が怪しいとこあるけ…

Q077. コードビハインドを使わずに親から子に画面遷移するには?

A.Livet を使うとコードビハインドを使わずに画面遷移が可能になります。Livet では画面遷移のメッセージアクションが提供されているので、これを使うといいでしょう。 ケースよっては、子画面を起動したら親画面を非表示にしたい場合もあります。その場合…

Livet をカスタマイズする。

#以下の記事は旧いバージョンによる記事です。最新版はこちらを参考にしてください。 国産 MVVM インフラ「Livet」も徐々に普及しつつあるようで、MSDN フォーラムでもちょくちょく名前を聞くようになってきました。 私も業務で使い倒してますが、VB プロジ…

Windows Phone アプリにチャレンジしてみた。

IS12T 購入をきっかけに Windows Phone アプリにチャレンジしてみました。ネタ元は Code Recipe の以下の記事です。 10 行でズバリ!! C# Windows Phone 7 タイマーを使ったアプリケーショ​ンの開発 チュートリアルどおり作っても面白くないので、コードビハ…

TreeView が配置された UI で Model-View-ViewModel パターンを使う方法(VB.NET)

TreeView にどう再帰的にデータを設定するか調べていたら、id:griefworker さんの以下の記事が見つかりました。 TreeView が配置された UI で Model-View-ViewModel パターンを使う方法 なるほど!HierarchicalDataTemplate を使えばいいわけですね!*1 以下…

Livet で Messenger を使ってみる(その四)

なんか某所で、先日のエントリから話が発展して、かなり盛り上がってた(?)ようなので・・・ コードビハインドがどーのと言ってましたが、本来なら以下のようにすべきで、コードビハインド使う必要ないと思うんですがねぇ・・・。

Livet で Messenger を使ってみる(その参)

本日はさらに踏み込んで、Livet が提供するメッセージングアクションのうち InformationDialogInteractionMessageAction ConfirmationDialogInteractionMessageAction OpenFileDialogInteractionMessageAction SaveFileDialogInteractionMessageAction の四…

Livet で Messenger を使ってみる(その弐)

昨日のエントリーのサンプルではつまらないという貴方に、さらに発展させた使い方を考えてみました。 たとえばこんな感じ。コードビハインドを使わずに、コンボボックスで選んだ操作を ViewModel のコマンド経由で実行します。 まず ViewModel のコードです…

Livet の Messenger クラスを使ってみる

本日のエントリーでは、Livet の Messenger 機能をチュートリアル風に公開してみます。これを使うと、画面の終了・最大化・最小化・標準化を、コードビハインドを全く書かずに操作することができます。今回は Visual Studio と Blend を使っています。Livet …

WebBrowser.NavigateToString を使ったビヘイビアを用意する。

先日のエントリ 「WPF で Google Map API を使ってルート検索してみる(Livet版)」 では、View のコードビハインドで WebBrowser.NavigateToString メソッドを呼び出してたわけですが、昨日 MSDN フォーラム見てたら、以前私がビヘイビア書いてたスレ見つけま…

WPF で Google Map API を使ってルート検索してみる(Livet版)

昨日 Google Map API でルート検索するサンプルを公開しましたが、本日はさらに一歩進め、先日のサンプルの Livet 版を作ってみました。 Livet は純国産の MVVM インフラで、先日最新版 0.98RC が公開されました。前のバージョンから大きく変わったとのこと…

WPF で Google Maps API を使ってルート検索してみる

昨日も Google Maps API の記事を書きましたが、今日は一歩進めて WPF のWindow 上でルート検索するサンプルを作ってみました。先日から Google Maps API の調査をしてますが、スクリプト書いてるだけじゃ面白くないので、WPF の勉強も兼ねて MVVM パターン…

Livet を使ってみた (by VB)

国内有数の MVVMer である尾上さんが開発中の Livet を触ってみました。 現在はまだドキュメントが整備されておらずどこから手を付けていいか判らない状態なので、まずはサンプルプロジェクトを触ってみようということに。ちなみに Livet って何という人のた…

MVVM パターンの ViewModel を C++/CLI で作ってみた(その2)

昨日の記事では、コマンドを定義してなかったのですが、本日は C++/CLI でコマンドにチャレンジしてみました。 まず RelayCommand クラスを C++/CLI で書いてみます。するとこうなる・・・ // RelayCommand.h #pragma once using namespace System; using na…

MVVM パターンの ViewModel を C++/CLI で作ってみた

現在 MVVM パターンを勉強中なんですが、View と ViewModel とModel と三つのレイヤーに明確に分離できることを見て、だったら各レイヤーごとにプロジェクトも完全分離して、ついでに各レイヤーごとに言語も分けて作ってみようと思いました。ついでに C++/CL…

VB で MVVM にチャレンジしてみた

いまさらですが、今年に入って知った最大の成果は、WPF なら MVVM パターン使うの当然じゃんということです。でもこの話、一部じゃまだまだ異論があるようで、ネットでちょっと調べるみると 単体テストしないなら MVVM 不要じゃん。 直感的に理解できねえし…