Hatena::ブログ(Diary)

周回遅れのブルース

2017-02-18 WPF FAQ

Q110. XamDataGrid でユーザーが設定したレイアウトを保存したい(其の参)

| 15:14 | Q110. XamDataGrid でユーザーが設定したレイアウトを保存したい(其の参)を含むブックマーク

A.以前、XamDataGrid でユーザーが操作した列の移動や並び替え、グループ化やソートを次回起動時用に保存したい場合、SaveCustomizations メソッドやLoadCustomizations メソッドを使えば、レイアウトの保存・読み込みが可能だという記事を公開しました。

関連記事:Q110. XamDataGrid でユーザーが設定したレイアウトを保存したい


しかし記事の最後に書いたとおり、ClearCustomizations メソッドでフィールドを初期状態に戻そうとすると

  • フィールドの表示状態を初期化できない
  • フィールドの固定がリセットされてしまう

という問題が発生するため、昨日のエントリでは、その対処としてコンストラクタでフィールドの状態を保存し、ClearCustomizationsメソッド実行後、LoadCustomizations メソッドで表示と固定列を初期化する方法を紹介しました。以下、その対処法の記事になります。


関連記事:Q110. XamDataGrid でユーザーが設定したレイアウトを保存したい(其の弐)


カスタムXamDataGrid

上記で一見解決できたように思えましたが、複雑なUIに配置されたグリッドや、TabItem に配置され起動時に非表示になってるグリッドは、コンストラクタや 画面のContentRendered イベント、いや XamDataGrid のOnRender でもフィールドが生成されてない場合があり、列情報を取得できないことがあることが判りました。

結局、DataPresenterBase.FieldLayoutInitialized イベントの通知後でないと、フィールドの初期状態を正確に取得することはできない模様です。

そこで Window のコードビハインドでいちいちイベント書くのも煩わしいため、XamDataGrid をカスタマイズした方が早いという結論に達しました。それがこちら。


コントロールの継承って好きじゃないですが、今回のケースでは止むを得ません。以上、何かの参考になりましたら幸いです。



WPF FAQ の目次に戻る

 

トラックバック - http://d.hatena.ne.jp/hilapon/20170218/1487398454