Q110. XamDataGrid でユーザーが設定したレイアウトを保存したい(其の弐)
A.以前、XamDataGrid でユーザーが操作した列の移動や並び替え、グループ化やソートを次回起動時用に保存したい場合、XamDataGrid.SaveCustomizations メソッドやXamDataGrid.LoadCustomizations メソッドを使えば、レイアウトの保存・読み込みが可能だという記事を公開しました。
関連記事:Q110. XamDataGrid でユーザーが設定したレイアウトを保存したい
しかしこれ、ひとつ問題がありまして、記事の最後に書きましたが
なお上記一連のメソッドの問題点ですが、FieldLayoutSettings で HeaderPrefixAreaDisplayMode プロパティを FieldChooserButton に設定しフィールドの表示項目を選択できるようにした場合、フィールドの表示/非表示の設定を保存したり、非表示にしたフィールドを ClearCustomizations メソッドで復帰することはできません。現状、表示状態の保存は独自に実装するしかないので、この辺りもう少し何とかして欲しいところです。
また、ClearCustomizations メソッドで FieldPosition を初期化すると、FixedLocation=FixedToNearEdge にしたフィールドが FixedLocation=None になってしまうのも問題です。
という悩ましい問題が存在します。
これ、いったいどういう処理を行ってるのか、幸い Infragistics WPF はソースコードが公開されてる*1ので読んでみました。DataPresenterBase.ClearCustomizations → CustomizationsManager.ClearCustomizations → FieldLayout.ClearCustomizations と遡ってコードを追ってくと、大元の FieldLayout.ClearCustomizations で Visiblity プロパティを初期化してないため、どうにもならんという結論がでました。*2
だめだこりゃ\(^o^)/*3
FieldChooser 対応版
そこで私は考えた。画面初期化時にField の情報をメンバ変数に保持し、いったん LoadCustomizations で読み込んでから ClearCustomizations メソッドを実行すればいいのではと・・・で、以下サンプルです。
まずビュー。
お次はコードビハインドです。Reset_Click メソッドに注目してください。
LoadCustomizations で十分では?と思う向きもおられるかもしれません。しかし列の移動や段組が初期化されないため、まず全プロパティを初期化した後、表示と列固定を初期状態に戻します。これで前回の宿題は解決しましたが、これに気づくまで3年かかりましたw