スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: スポンサー広告

DataGrid用のViewModelを作ったよ。(弐)

長くなったので、分けた。の続き。

○DataGridのItemに対するViewModel
 DataGridの各行(DataGridRow)のDataContextとなる。ついでにセル(DataGridCell)のDataContextでもある。 INotifyPropertyChangedインターフェースの実装は必須となる。これがないと、パフォーマンスに影響するという話。
 可能であれば、IDisposableインターフェースも実装しておいた方が、終了処理が楽。

 ◇プロパティ(基本)
  ・ViewIndex
   ビュー上のインデックス。ItemsSourceに設定された時に設定したい感じ。削除されたら、-1になる。
   ただ、フィルタ等と連動させると重くなりそうだったので、取得したい時にリフレッシュさせる感じにした。
  ・IsCurrenRow
   現在行かどうか。つい最近実装。CurrentItemプロパティ系のメソッド内で設定される。
   DataTrigger等で使うことを目論んでいる。
  ・IsDeleted
   削除されているかどうか。無効かどうかとか。マスタテーブルのデータを表示する時に、無効データも表示するケースがあるので、これをもたせている。
 ◇プロパティ(編集)
  ・IsReadOnly
   アイテム(行)そのものが読取専用かどうか。
  ・IsUpdated
   更新されたかどうか。自身のPropertyChangedイベントをフックして、編集可能項目なら、trueに設定する。
  ※IEditableObjectインターフェース(System.ComponentModel)を実装すると、「行単位」の編集を実装できたりするけど、あまり使わなかった。
 ◇プロパティ(選択)
  ・IsSelected
   選択されているかどうか。
  ・CanUserSelect
   ユーザが選択できるかどうか。
  ※これらは、DataGridが持つ選択機能とは連動させていない。

  これらのプロパティを、DataGridのアイテムとなるクラス全てに実装するのか?という話になった時、
  ・サーバ-クライアント通信時にデータ量が増える。
   上記プロパティは、ぶっちゃけて言えば、クライアントにあれば十分。
  ・インターフェースにしたところで、結局個別に実装することには変わりない。
   ※インターフェースを用意しなくて良い、という訳ではない。
  ・WebサービスやWCFサービス等のプロクシ(Proxy)となるクラスでは、インターフェースを実装できない。
   WebサービスはINotifyPropertyChangedも実装できない。WCFサービスは設定次第で可能。
  等々、めんどくさい難しい問題が上がってきた。ココらへんの話もおいおいメモしていく。

仕事では更に拡張された機能を持つViewModelを使用している。データ仮想化等も行なっている。
それでも、列数が増えたりしたら、やはり動きが"もっさり"するので、改良の余地はまだまだあったりする。
スポンサーサイト
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: WPF4 | コメント: 0 | トラックバック: 0


この記事へのコメント

コメントの投稿

非公開コメント


サイドバー背後固定表示サンプル

当ブログに書かれたソースコードは流用自由です。

バグ、スペルミス等はありうる事です。

ご利用の際は自己責任でお願いしますm(_ _)m

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