У меня неожиданная проблема с привязкой к списку enum.Привязка молча завершается ошибкой, и я затрудняюсь объяснить, почему.
Что должен сделать этот код, это создать DataGrid с шаблоном ячейки в виде комбинированного списка, заполненного вариантами перечисления, и выбранному элементу присваивается значениеЭлемент списка.
Этот подход отлично работает в других местах для наблюдаемых коллекций объектов, у которых элемент enum является свойством .Value.Это только кажется, что не нравятся наблюдаемые коллекции элемента enum.
Для ясности приведу несколько примеров классов:
public enum EquipmentEnum { EquipmentA, EquipmentB, EquipmentC }
public class EquipmentClass { public EquipmentEnum Value { get; set; } }
Этот работает :
<DataGrid AutoGenerateColumns="False"
ItemsSource="{Binding equipmentClassList}"> <!-- ObservableCollection<EquipmentClass> -->
<DataGrid.Columns>
<DataGridTemplateColumn Header="Equipment Used" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Source={local:Enumeration {x:Type EquipmentEnum}}}"
SelectedIndex="{Binding Path=Value Converter={StaticResource convertEnumValueToIndex}, Mode=TwoWay}"
DisplayMemberPath="Description"
IsEditable="True" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Это не работает:
<DataGrid AutoGenerateColumns="False"
ItemsSource="{Binding equipmentEnumList}"> <!-- ObservableCollection<EquipmentEnum> -->
<DataGrid.Columns>
<DataGridTemplateColumn Header="Equipment Used" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Source={local:Enumeration {x:Type EquipmentEnum}}}"
SelectedIndex="{Binding Converter={StaticResource convertEnumValueToIndex}, Mode=TwoWay}"
DisplayMemberPath="Description"
IsEditable="True" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Только некоторые примечания:
local:Enumeration
- расширение разметки, которое просто предоставляет описанияэлементов перечисления в виде списка.
Заранее спасибо.