【发布时间】:2015-03-12 15:27:00
【问题描述】:
我尝试在我的数据网格组合框列中进行枚举,但将其按名称排序,并且仍然能够将所选选项绑定到作为网格源的对象。
我尝试了两种不同的方法来实现这一点。
枚举声明
public enum Animals
Zebra
Antelope
Ox
Mouse
End Enum
XAML 枚举参考
xmlns:obj="clr-namespace:SMS_Obj.Enumerations;assembly=SMS_Obj"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
<CollectionViewSource x:Key="AnimalEnum">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription />
</CollectionViewSource.SortDescriptions>
<CollectionViewSource.Source>
<ObjectDataProvider MethodName="GetNames" ObjectType="{x:Type sys:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="obj:Animals" />
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</CollectionViewSource.Source>
</CollectionViewSource>
对象集为网格的 ItemsSource
名单
Public Class clsAnimals
Private _AnimalID As SMS_Obj.Enumerations.Animals
Public Property AnimalID() As SMS_Obj.Enumerations.Animals
Get
Return _AnimalID
End Get
Set(ByVal value As SMS_Obj.Enumerations.Animals)
_AnimalID = value
End Set
End Property
End Class
尝试 1
<DataGridComboBoxColumn x:Name="dgcAnimalName" Header="Animal Name" Width="*" SelectedValueBinding="{Binding Path=AnimalID, UpdateSourceTrigger=PropertyChanged}" ItemsSource="{Binding Source={StaticResource AnimalEnum},Mode=OneWay}" />
尝试 2
<DataGridTemplateColumn x:Name="dgcAnimalName" Header="Animal Name" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox DataContext="{StaticResource AnimalEnum}" SelectedValuePath="{Binding Path=AnimalsID, UpdateSourceTrigger=PropertyChanged}" ItemsSource="{Binding}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox DataContext="{StaticResource AnimalEnum}" SelectedValuePath="{Binding Path=AnimalID, UpdateSourceTrigger=PropertyChanged}" ItemsSource="{Binding}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
两次尝试都正确绑定枚举,但我丢失了对象上已经存在的值和任何新值。我认为我缺少一些东西,因为我以前从未在 XAML 中使用过排序枚举。
提前谢谢你
【问题讨论】: