【问题标题】:Sorted Enumeration in DataGrid Combo ColumnDataGrid 组合列中的排序枚举
【发布时间】: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 中使用过排序枚举。

提前谢谢你

【问题讨论】:

    标签: wpf vb.net datagrid


    【解决方案1】:

    它不绑定的原因是因为 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}" />  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-21
      • 1970-01-01
      • 2014-07-12
      相关资源
      最近更新 更多