对与枚举的 ObservableCollection 绑定的组合框项目进行排序
Sort Combobox items binded with ObservableCollection of enum
我有简单的组合框:
<ComboBox Grid.Row="0" Grid.Column="1" x:Name="elementTypesComboBox" SelectedValue="{Binding Path=NVP.ElementType, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Stretch" SelectionChanged="ComboBox_SelectionChanged" IsEnabled="{Binding Path=NVP.CEB, Converter={StaticResource CanAddNewElementConverter}, FallbackValue=false}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock VerticalAlignment="Center" Text="{Binding Path=., Mode=OneWay, Converter={StaticResource ElementTypeToStringConverter}}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
绑定:
ObservableCollection<ElementTypes> elementTypes = new ObservableCollection<ElementTypes>();
其中 'ElementTypes' 是枚举,集合中填充了所有枚举值。示例:
public enum ElementTypes
{
E2,
E5,
E6,
E1
}
我只想对我的组合框项目进行排序。
我试过了:
1) 第一个解决方案:
elementTypesComboBox.Items.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));
elementTypesComboBox.Items.SortDescriptions.Add(new SortDescription("Content", ListSortDirection.Ascending));
2) 二次解
elementTypes = new ObservableCollection<UndrawnElementTypes>(elementTypes.OrderBy(i => i));
elementTypesComboBox.ItemsSource = elementTypes;
None这个不行。我做错了什么?
在 OrderBy()
中使用 ToString()
按字母顺序对 ComboBox 项目进行排序:
elementTypesComboBox.ItemsSource = Enum.GetValues(typeof(ElementTypes))
.Cast<ElementTypes>()
.OrderBy(e => e.ToString())
.ToList();
您可以按照相同的方式对 ElementTypes
的任何预定义子集进行排序:
IEnumerable<ElementTypes> elements = ...
elementTypesComboBox.ItemsSource = elements
.OrderBy(e => e.ToString())
.ToList();
我有简单的组合框:
<ComboBox Grid.Row="0" Grid.Column="1" x:Name="elementTypesComboBox" SelectedValue="{Binding Path=NVP.ElementType, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Stretch" SelectionChanged="ComboBox_SelectionChanged" IsEnabled="{Binding Path=NVP.CEB, Converter={StaticResource CanAddNewElementConverter}, FallbackValue=false}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock VerticalAlignment="Center" Text="{Binding Path=., Mode=OneWay, Converter={StaticResource ElementTypeToStringConverter}}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
绑定:
ObservableCollection<ElementTypes> elementTypes = new ObservableCollection<ElementTypes>();
其中 'ElementTypes' 是枚举,集合中填充了所有枚举值。示例:
public enum ElementTypes
{
E2,
E5,
E6,
E1
}
我只想对我的组合框项目进行排序。
我试过了:
1) 第一个解决方案:
elementTypesComboBox.Items.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));
elementTypesComboBox.Items.SortDescriptions.Add(new SortDescription("Content", ListSortDirection.Ascending));
2) 二次解
elementTypes = new ObservableCollection<UndrawnElementTypes>(elementTypes.OrderBy(i => i));
elementTypesComboBox.ItemsSource = elementTypes;
None这个不行。我做错了什么?
在 OrderBy()
中使用 ToString()
按字母顺序对 ComboBox 项目进行排序:
elementTypesComboBox.ItemsSource = Enum.GetValues(typeof(ElementTypes))
.Cast<ElementTypes>()
.OrderBy(e => e.ToString())
.ToList();
您可以按照相同的方式对 ElementTypes
的任何预定义子集进行排序:
IEnumerable<ElementTypes> elements = ...
elementTypesComboBox.ItemsSource = elements
.OrderBy(e => e.ToString())
.ToList();