スポンサーサイト

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

DataGridCellInfoから、バインドされているプロパティを取得する。

DataGridにおけるバインディングは、列単位で指定する。ということは、列がわかれば、そこで使われている(バインディングされている)プロパティがわかる(筈)という事。
ただ、DataGridCellInfoには、Itemという行にバインディングされているオブジェクトは取得できるが、そのセル(列)にバインディングされているプロパティを取得するプロパティはない。
なんで無いのか?という推測はできるけど、無いものはないので、限定的な前提で取得できるメソッドを作った。

/// <summary>
/// 指定されたDataGridColumnのプロパティパスを取得します。<br/>
/// ソートメンバーパスが設定されていなければ、バインドされているプロパティ名を
/// 取得します。<br/>
/// </summary>
/// <param name="column">DataGridColumnオブジェクト</param>
/// <returns>バインディングされているプロパティのパス</returns>
public static string GetBindingPath(this DataGridColumn column) {
var path = column.SortMemberPath;

if (!string.IsNullOrWhiteSpace(path)) {
return path;
}

if (column is DataGridBoundColumn) {
var binding = (column as DataGridBoundColumn).Binding as Binding;

if (binding != null) {

if (!StringUtil.IsEmpty(binding.XPath)) {
return binding.XPath;
} else if (binding.Path != null) {
return binding.Path.Path;
}
}
} else if (column is DataGridComboBoxColumn) {
return ((DataGridComboBoxColumn)column).SelectedValuePath;
}

column = null;
return path;
}

使い方:

using
...

if (dataGrid.CurrentCell != null) {
//カレントセルに表示されているプロパティ名を取得します。
var path = dataGrid.CurrentCell.Column.GetBindingPath();
//...
}


・SortMemberPathプロパティを優先して取得します。
・SortMemberPathプロパティが未設定の時、且つ対象の列がDataGridBoundColumnである時のみ、
 バインディングオブジェクトからパスを取得します。
SortMemberPathを取得するのは、DataGridTemplateColumn用。DataGridTemplateColumnは、DataGridBoundColumnを継承していないので、Bindingオブジェクトを使うことはできない。
DataGridComboBoxColumnもDataGridBoundColumnを継承していないので、別処理になっている。
DataGridComboBoxColumn クラス
課題:
 このメソッドは、マルチバインディングされている列には対応できない。
 マルチバインディングを使用していないというのが、「限定的な前提」。
スポンサーサイト
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: WPF4 | コメント: 0 | トラックバック: 0


この記事へのコメント

コメントの投稿

非公開コメント


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

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

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

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

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