アイテムソースを設定するデータグリッドがあるList<User>
です。 ユーザーのプロパティの1つは、説明付きの列挙型であるDepartment
です。WPF DataGridComboBoxColumn Enumの動的バインド
データグリッドの部署は、ユーザーがコンボボックスとして選択して表示します。 enumの値と説明をDataGridComboBoxColumn
にバインドする必要があります。
これまでのところ、EnumをDataGridComboBoxColumn.ItemsSource
にバインドするか管理していましたが、説明は考慮されていません。 または値のコレクションをDataGridComboBoxColumn.ItemsSource
に設定し、DisplayMemberPath
,SelectedValuePath
と設定します。しかし、この場合、値はDataGridComboBoxColumnにバインドされません。
ビュー:
<DataGrid x:Name="userData" HorizontalAlignment="Stretch" Margin="10,157,10,80" VerticalAlignment="Stretch" Height="Auto" Width="Auto"
AutoGeneratingColumn="UserData_OnAutoGeneratingColumn" DisplayMemberPath="Description"/>
コード:
private void UserData_OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (e.Column.SortMemberPath == "Department")
{
(e.Column as DataGridComboBoxColumn).ItemsSource = EnumExtension.ProvideValue();
(e.Column as DataGridComboBoxColumn).DisplayMemberPath = "Description";
(e.Column as DataGridComboBoxColumn).SelectedValueBinding = new Binding("Value");
(e.Column as DataGridComboBoxColumn).SelectedValuePath = "Value";
}
}
列挙拡張子:
public static class EnumExtension
{
public static List<ValueDescriptionVm<Departments>> ProvideValue()
{
return Enum.GetValues(typeof(Departments))
.Cast<object>()
.Select(enumValue => new ValueDescriptionVm<Departments>()
{
Value = (Departments)enumValue,
Description = GetDescription((Enum)enumValue)
}).ToList();
}
private static string GetDescription(Enum enumValue)
{
FieldInfo fi = enumValue.GetType().GetField(enumValue.ToString());
var attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (attributes.Length > 0)
{
return attributes[0].Description;
}
return enumValue.ToString();
}
}
は、私がここに同様の質問をし、[リンク](https://stackoverflow.com/questions/45349465/wpf-datagrid-datagridcomboboxcolumn-cells-displayed-value)、それはComboBoxSelectedItemはである何@stuicidle – stuicidle
を役に立てば幸いです。 SelectedValueBinding = ComboBoxSelectedItem? (説明、価値の集まり)? –
この例ではコンボボックスから選択したときに更新されるComboBoxOptionオブジェクトです – stuicidle