c# - WPF DataGridComboBoxColumn dynamic binding of Enum -
i have datagrid set item source list<user>
. 1 of properties of user department
enum descriptions.
in datagrid departments displayed combobox user select one. need bind enum value , description datagridcomboboxcolumn
.
so far managed either bind enum datagridcomboboxcolumn.itemssource
works description isn't taken account. or set collection of value, description datagridcomboboxcolumn.itemssource
, set displaymemberpath
, selectedvaluepath
. in case value doesn't bind datagridcomboboxcolumn.
the view:
<datagrid x:name="userdata" horizontalalignment="stretch" margin="10,157,10,80" verticalalignment="stretch" height="auto" width="auto" autogeneratingcolumn="userdata_onautogeneratingcolumn" displaymemberpath="description"/>
the code:
private void userdata_onautogeneratingcolumn(object sender, datagridautogeneratingcolumneventargs e) { if (e.column.sortmemberpath == "department") { (e.column datagridcomboboxcolumn).itemssource = enumextension.providevalue(); (e.column datagridcomboboxcolumn).displaymemberpath = "description"; (e.column datagridcomboboxcolumn).selectedvaluebinding = new binding("value"); (e.column datagridcomboboxcolumn).selectedvaluepath = "value"; } }
enum extension:
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(); } }
the path of selectedvaluebinding
should name of property of user
class:
(e.column datagridcomboboxcolumn).selectedvaluebinding = new binding("department");
then binding should work provided type of department
property of user
class , value
property of valuedescriptionvm<departments>
class same.
Comments
Post a Comment