DataGrid组合列中的排序枚举

时间:2015-03-12 15:27:01

标签: wpf vb.net datagrid

我尝试在我的datagrid组合框列中进行枚举,但是按名称对其进行排序,并且仍然能够将所选选项绑定到作为网格源的对象。

我尝试了两种不同的方法来实现这一目标。

枚举声明

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中使用过排序的Enum。

先谢谢你

1 个答案:

答案 0 :(得分:0)

它不是绑定的原因是因为GetNames调用,使SelectedValue成为字符串而不是整数。我可以通过将对象更改为

来使其工作
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
    If _TableName <> [Enum].GetName(GetType(SMS_Obj.Enumerations.Animals), _AnimalID ) Then
        _TableName = [Enum].GetName(GetType(SMS_Obj.Enumerations.Animals), _AnimalID )
    End If
End Set
End Property
Private _AnimalName As String
Public Property AnimalName() As String
Get
    Return _AnimalName
End Get
Set(ByVal value As String)
    _AnimalName = value
    If _AnimalID  <> [Enum].Parse(GetType(SMS_Obj.Enumerations.Animals), _AnimalName) Then
        _AnimalID  = [Enum].Parse(GetType(SMS_Obj.Enumerations.Animals), _AnimalName)
    End If
End Set
End Property

与此相关:

 <DataGridComboBoxColumn x:Name="dgcAnimalName" Header="Animal Name" Width="*" SelectedValueBinding="{Binding Path=AnimalName, UpdateSourceTrigger=PropertyChanged}" ItemsSource="{Binding Source={StaticResource AnimalEnum},Mode=OneWay}" />  
相关问题