タグ

.NETに関するkeihsのブックマーク (196)

  • 結局最後は「MVVM + Messenger + Behavior パターン」に行き着いた - present

    はじめに 前回、Messenger パターンという、ViewModel から View に要求を送る方法を試しました。 いまさら聞けない「MVVM + Messenger パターン」超入門 - present ただ、「View のコードビハインドにメッセージを処理するコードなんて書きたくない!」っていう人は結構いるみたいです。私もできることならコードビハインド書きたくないですね。 そんな人向けに、「Blend SDK に含まれている System.Windows.Interactivity.dll を使って、メッセージに対する処理を XAML で書いてしまおう」という、 Messenger を発展させたパターンがありました。その名も「Messenger + Behavior パターン」。 Messenger + Behavior パターンの鍵 System.Windows.Interact

    結局最後は「MVVM + Messenger + Behavior パターン」に行き着いた - present
  • WPFアプリケーションの国際化対応 - かずきのBlog@hatena

    リソースファイルを使う方法が簡単そうなので、試してみました。参考にしたのは以下のサイトというか、ほぼそのままですね。自分用メモという意味合いが強いです。 WPFの国際化対応 デフォルトで用意されてるResources.resxに加えてResources.ja-JP.resxを作成します。 中身はこんなかんじ。アクセス修飾子をPublicにしておくのがポイントです。 Resources.ja-JP.resxの中身はこんなかんじです。同じキーに対して違う文字列を割り当ててます。こちらはコード生成なしになってるのがポイントですね。(自動でなしになってるはず) そして、このクラスをApp.xamlのResourcesとして登録します。 <Application x:Class="WpfResource.App" xmlns="http://schemas.microsoft.com/winfx/2

    WPFアプリケーションの国際化対応 - かずきのBlog@hatena
    keihs
    keihs 2011/03/10
  • MVVMでメモリリークしちゃってました 原因と対策編 - かずきのBlog@hatena

    2011/03/02 コメントの指摘を受けて修正。 間違ってた部分。 WeakPropertyChangedViewModelBaseクラスの以下の処理。 PropertyChangedEventManager.AddListener( this.Model, new PropertyChangedWeakEventListener( base.RaisePropertyChanged), string.Empty); 正しいものに差し替えました。taguoさん指摘ありがとうございました。今、UxeenというWPF製でMVVM適用して頑張って作ってるTwetterクライアントのプロジェクトのリーダーのid:anis774さんにプロジェクトに入れてもらってMVVM関連のところを見たり、気になるところに手を入れたりしてる今日この頃です。 そこで、こんな感じのプログラムを書いていたのですよ。 n

    MVVMでメモリリークしちゃってました 原因と対策編 - かずきのBlog@hatena
  • MVVMでDataGridで選択されている行を新しいウィンドウに表示させる - かずきのBlog@hatena

    MSDN フォーラムでMVVMの画面遷移についてという質問が上がってたので、Prismを使ってやってみました。 この例で使ってるInteractionRequestの使い方は、以下の記事を参照してください。 MVVMパターンでVMからVを操作する Prism編 ViewModelの作成 今回は、ViewModelからViewへのプロパティの変更通知は必要ない小さなサンプルなので、あえてViewModelはINotifyPropertyChangedを実装していません。単純にめんどくさいからです。 まず、DataGridに表示させる行に対応するViewModelを作成します。 namespace SelectItemWindow { // 画面遷移が主題なのでModelは省いてます public class PersonViewModel { public string Name { get

    MVVMでDataGridで選択されている行を新しいウィンドウに表示させる - かずきのBlog@hatena
  • Nine Works: ListBoxでドロップした位置に挿入する

  • PrismのMVVM関連のクラスを使ってHello world - かずきのBlog@hatena

    Prismの最新バージョンからMVVMでの開発をサポートしてくれるようになりました。という話を聞いてPrismをダウンロードしてきてレッツトライ!としようと思うと、Bootstrapperがどうの、EventAggregaterがどうの、Regionがどうの、MEFがどうのUnityがどうのetc...と色々覚えないといけないおまけがついてくる割に、MVVM何処にあるんだ??という状態になってしまいます。 Prismは、使いこなすと便利なのですが、そういう便利クラスは置いておいて、MVVMの基クラスだけ拝借するのでしたら、以下で述べてるクラス群をチョイスして使うだけでOKです。 PrismでMVVM(Model View ViewModel)パターンのサポート用に用意されているクラスのまとめ ということでPrismを使ってMVVMをしようとする人がPrismの樹海に迷い込まないようにPr

    PrismのMVVM関連のクラスを使ってHello world - かずきのBlog@hatena
  • MVVMによるSilverlightアプリケーションの開発(その1)

    public class Find書籍Command : ICommand { public Find書籍Command() { } /// <summary> /// 実行状態が変更された場合に発生するイベントハンドラ /// </summary> public event EventHandler CanExecuteChanged; /// <summary> /// CanExecuteChangedイベントを発生させ、CanExecuteメソッドを実行します。 /// </summary> public void RaiseCanExecuteChanged() { var handler = CanExecuteChanged; if (handler != null) handler(this, EventArgs.Empty); } /// <summary> /// コマ

  • VB.NETにMVVM LightToolkitのテンプレートを追加しよう

    MVVM LightToolkitのVB用テンプレートがないと聞いたので、とりあえずViewModelのテンプレートを作ってみました。 Visual Studioのテンプレートを作るのは簡単です。 もともとになるプロジェクトやファイルを作って、 置き換えようのパラメーターをソースに適用して、 ウィザードからテンプレート化して、 UserTemplateフォルダーに置く だけ。 ということで、やってみます。 1.テンプレートのもととなるプロジェクトを作る。 まずは、テンプレートのもととなるプロジェクトを作ります。 来のMVVM LightToolkitプロジェクトテンプレートから作られるプロジェクトは、アセンブリの参照以外にも、MVVM LocatorやMVVM Viewなどが最初からプロジェクトに追加されていますが、今回は単にMVVM LightToolkitのアセンブリが追加され、V

    VB.NETにMVVM LightToolkitのテンプレートを追加しよう
  • MVVMによるSilverlightアプリケーションの開発(その2)

    はじめに 「MVVMパターンでアプリケーションを実装するのは面倒だ」 そんな時、簡単に利用できるユーティリティや簡単なツールキットの使用を検討してみてはどうでしょうか。今回は、Silverlight 4の開発で利用できるユーティリティやツールキットを解説します。 RelayCommand ICommandインターフェイスの実装を行っていると、ExecuteメソッドやCanExecuteメソッド以外はほぼ同じような実装を行えば良いことに気づきます。MVVMを採用した多くのプロジェクトでは、ExecuteメソッドやCanExecuteメソッドをデリゲートで受け取るようにしたRelayCommandというユーティリティクラスを導入して、コマンド実装の手間や修正を簡素化しています。リスト1にRelayCommandのサンプルを示します。 public class RelayCommand<T> :

  • MVVMによるSilverlightアプリケーションの開発(その1)

    はじめに Silverlightに限らない話ですが、ページからのイベントに対する処理をすべてイベントハンドラに記述してしまったために、再利用性が著しく低かったり、単体テストがひどくやりにくいシステムを見たことはありませんか? これは、プログラムの機能をすべて同じ層に記述していることが原因の1つです。 この問題に対するSilverlightでの解決策の1つが、MVVMパターンです。今回はMVVMパターンと、MVVMパターンの要となるデータバインディング、コマンドバインディングについて2回にわたって解説します。 MVVMパターンとは MVVMはModel-View-ViewModelの頭文字をとった、アプリケーションの階層化パターンの1つです。階層化パターンを適用することで各層の依存関係が薄くなり、アプリケーションの修正、複数人数での分散開発、単体テストなどが実施しやすくなります。 Expre

  • ASP.NET MVC 3 開発入門 - インデックス - しばやん雑記

    全 24 回で完結しました。 はじめに 前提知識 構成図 完成したアプリのイメージ 環境の構築 プロジェクトを作成 ビューエンジンの選択 作成されたプロジェクトを確認 サーバ側のロジックを開発 モデルをコードファーストで作成 リポジトリパターンを適用する コントローラの追加 コントローラの実装 アクションの追加 強力なモデルバインダ アクションの実装 動画アップロードの実装 クライアント側のロジックを開発 ビューの作成 Razor の文法 ビューの実装 Details アクション Create, Edit アクション Delete, Index アクション HTML ヘルパーを活用 タグ・コメント登録を実装する クライアントサイド検証を利用する ローカル環境で動作を確認 IIS 7.5 Express で動作検証 ルーティング定義を確認、追加 自動的に作成されたテーブルを確認 ASP.NE

    ASP.NET MVC 3 開発入門 - インデックス - しばやん雑記
    keihs
    keihs 2011/02/22
  • Managed Extensibility Framework入門 その3「Export」 - かずきのBlog@hatena

    さて、前回はMEFを使ってHello world的なプログラムを作成しました。基的には、クラスにExport属性をつけてカタログに公開するという設定をして、Import属性をつけてカタログ内のクラスを設定してもらうという流れでした。ということで、ExportとImportの指定の仕方で、好きなようにクラスを組み上げることが出来るということです。なので、今回はまずExportを、少し掘り下げてみてみようと思います。 前回のおさらい 前回、以下のようなHello MEF!!と表示されるプログラムを作成しました。 namespace HelloMEF { using System; using System.ComponentModel.Composition; using System.ComponentModel.Composition.Hosting; using System.Refl

    Managed Extensibility Framework入門 その3「Export」 - かずきのBlog@hatena
    keihs
    keihs 2011/02/20
  • Managed Extensibility Framework入門 その2「使うに当たって覚えておきたいこと」 - かずきのBlog@hatena

    さて、前回はMEFというよりはDIコンテナとはなんぞや?ということについて語ってしまうような内容になってしまいました。今回はMEFを使う上で知っておきたいクラスと、その役割について説明します。因みに、ここで使用するのは基的にMEFを使うのに必要なものだけで、応用的なものは説明しません。さらに、動作についても簡単に説明しますがイメージをつかんでもらうための説明のため、実際に担ってる動きとは違う内容を話てるかもしれないので気を付けてください。 今回取り扱うクラス DIコンテナ役 System.ComponentModel.Composition.Hosting.CompositionContainer カタログ役 System.ComponentModel.Composition.Hosting.AssemblyCatalog System.ComponentModel.Compositio

    Managed Extensibility Framework入門 その2「使うに当たって覚えておきたいこと」 - かずきのBlog@hatena
    keihs
    keihs 2011/02/17
  • Managed Extensibility Framework入門 その1「はじめに」 - かずきのBlog@hatena

    参考情報 入門の最初にいきなり参考情報というのもなんですが、以下のサイトで独学出来る人はこれから書くであろう一連のエントリは見なくてもいいと思います。もし、見て頂けるなら、この解釈間違ってるとか、この記述がおかしいとコメントなどで指摘して頂けるとうれしいです。 開発しているサイト .NET Framework 4とSilverlight 4からひっそりと?追加されているものの中に、Managed Extensibility Framework(以降MEF)というものがあります。MEFは、CodePlexで開発が行われていて公式サイトは以下になります。 http://mef.codeplex.com/ MSDN内のMEFのサイト また、MSDN内にも概要が書かれています。MSDNの内容も丁寧に書かれているので、ここで書く必要も無いのでは??と思ったりもしましたが、自分の理解のために書いていこ

    Managed Extensibility Framework入門 その1「はじめに」 - かずきのBlog@hatena
    keihs
    keihs 2011/02/16
  • Silverlight/WPFで使える逆引きTips集一覧

    CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

    Silverlight/WPFで使える逆引きTips集一覧
  • ViewModelのコードの自動生成機能とアイテムテンプレートを作ってみた - かずきのBlog@hatena

    非実在コマンドパターンを掘り下げていくと、どう頑張ってもVisual Studioがコマンドをうまく認識してくれない+Expression Blendのデザイナがエラーはいて表示してくれなくなったりと挫折してしまいました。 ということで、ViewModelは今の所自動生成するのが一番なんだろうという考えに至り、とりあえずViewModelの自動生成と、それようのアイテムテンプレートを作りました。 ちなみに、中身がわかれば任意のViewModelの基クラスとかに差し替えとかも出来たりしますが今回作ったのは@ugaya40さんがこっそり作ってる、まだ未完成&未公開のLivetというMVVMフレームワークを前提にしてます。Livetのバイナリは同梱してるので、使うことは出来ます。(たぶんベータ以前の状態だと思われ) とりあえず、今回作ったのは以下のものです。 LivetSupportTempl

    ViewModelのコードの自動生成機能とアイテムテンプレートを作ってみた - かずきのBlog@hatena
  • ListBoxの項目がダブルクリックされたらViewModelのCommand(or メソッド)を呼ぶ - かずきのBlog@hatena

    タイトルの通りのことを、コードビハインド無しでやろうとしたら・・・?ということでやってみました。 ViewModelやModel側はこんな感じ。今回は、VMにうまいこと処理がわたったのがわかるように、VMでMessageBox出してます。ご愛嬌ということで。 namespace ListBoxItemTest { using System.Collections.ObjectModel; using System.Linq; using System.Windows; public class MainWindowViewModel { public ObservableCollection<Person> People { get; private set; } public MainWindowViewModel() { // ダミーデータ this.People = new Obse

    ListBoxの項目がダブルクリックされたらViewModelのCommand(or メソッド)を呼ぶ - かずきのBlog@hatena
  • 単体テストしやすいクラスの書き方 - かずきのBlog@hatena

    単体テストしやすいように依存するクラスをコンストラクタから指定して、テスト時と番時で差し替え可能にする方法ってあると思います。 今まで、そういうコードを書くときはこう書いてました。 class Hoge { private IFoo foo; public Hoge(IFoo foo) { this.foo = foo; } // 番用にデフォルトのインスタンスを渡す public Hoge() : this(new Foo()) {} } こうしておけばテスト時に以下のように書けます。 var h = new Hoge(new FooMock()); ただ、こういう書き方もできるんだなというのを見つけました。 class Hoge { private IFoo foo; // デフォルトの引数でnullを渡しておく public Hoge(IFoo foo = null) { //

    単体テストしやすいクラスの書き方 - かずきのBlog@hatena
    keihs
    keihs 2011/01/07
  • [VB.NET]行儀の悪いWebサーバのせーで「サーバーによってプロトコル違反が発生しました」が発生する場合の回避方法 - スベログ/D

    フリーライドスキー(フリースキー)とアグレッシブインラインスケートとデジタル機器と、時々、日常のマッタリなブログ System.Net.WebClientやSystem.Net.WebRequestを利用していて、ある特定のWebサーバとのやり取りすると・・・ サーバーによってプロトコル違反が発生しました. Section=ResponseStatusLine と、WebExceptionがスローされる場合があります。 念のためWebExceptionのStatusプロパティを確認してみると"ServerProtocolViolation"となってたりします。 つまり、応答したWebサーバのレスポンスがHTTP的に正しくないため、.NET Frameworkの厳密なHTTPの検証に引っかかってしまってエラーとなるよーです。 メッセージ中のSectionが示している通り「ステータス行の不正」

    [VB.NET]行儀の悪いWebサーバのせーで「サーバーによってプロトコル違反が発生しました」が発生する場合の回避方法 - スベログ/D
  • Microsoft Download Center: Windows, Office, Xbox & More