【问题标题】:Binding DataGridComboBoxColumn to an enum declared inside a class将 DataGridComboBoxColumn 绑定到类中声明的枚举
【发布时间】:2019-07-14 08:38:16
【问题描述】:

我有一个绑定到我的数据库的数据网格: 我希望性别列是一个组合框,其选定的值来自数据库。 Gender 是 Member 类中的一个枚举:

namespace Elysium.model
{ 
    class Member
    {
        public enum MemberType { Standard, Premium }
        public enum Status { Inactive, Active }
        public enum Gender { Male, Female } 

我尝试通过以下方式绑定它,但它给了我一个错误,即 Gender 未在命名空间中定义,或者当我执行 <x:Type TypeName="local.Member:Gender" ></x:Type> 时不允许嵌套:

<ObjectDataProvider x:Key="genderEnum" MethodName="GetValues" ObjectType="{x:Type LocalValueEnumerator}">
        <ObjectDataProvider.MethodParameters>
            <x:Type TypeName="local:Gender" ></x:Type>
        </ObjectDataProvider.MethodParameters>
    </ObjectDataProvider>

ViewMembers.xaml:

<Grid DataContext="{StaticResource memberViewSource}">
    <DataGrid x:Name="memberDataGrid" AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding}" RowDetailsVisibilityMode="VisibleWhenSelected" Width="1100" Height="600">
        <DataGrid.Columns>
            <DataGridTextColumn x:Name="memberIDColumn" Binding="{Binding MemberID}" Header="Member ID" Width="SizeToHeader"/>
            <DataGridTextColumn x:Name="nameColumn" Binding="{Binding Name}" Header="Name" Width="SizeToHeader"/>
            <DataGridTextColumn x:Name="fatherNameColumn" Binding="{Binding FatherName}" Header="Father Name" Width="SizeToHeader"/>
            <DataGridComboBoxColumn x:Name="genderColumn" SelectedValueBinding="{Binding Value}" Header="Gender" Width="SizeToHeader"/>

ViewMembers.xaml.cs:

public partial class ViewMembers : Page
{
    DataTable memberTable = new DataTable();

    public ViewMembers()
    {
        InitializeComponent();
        MemberDatabase members = MemberDatabase.getApplicationDatabase();
        memberTable = members.getAllMembers();
        memberDataGrid.ItemsSource = memberTable.DefaultView;
    }

项目结构:

【问题讨论】:

    标签: c# wpf datagrid datagridcomboboxcolumn


    【解决方案1】:

    ObjectType 应设置为System.Enum

    <ObjectDataProvider x:Key="genderEnum" 
                        xmlns:sys="clr-namespace:System;assembly=mscorlib"
                        MethodName="GetValues" ObjectType="{x:Type sys:Enum}">
        <ObjectDataProvider.MethodParameters>
            <x:Type TypeName="local:Gender" />
        </ObjectDataProvider.MethodParameters>
    </ObjectDataProvider>
    

    用法:

    <DataGridComboBoxColumn x:Name="genderColumn"
                            ItemsSource="{Binding Source={StaticResource genderEnum}}" ... />
    

    【讨论】:

    • 它给了我一个错误,即名称空间中不存在性别。性别在 Member 类中,当我做 Member.Gender 时,它说不支持嵌套类型。
    • 我能够通过重新启动 Visual Studio 来消除错误。组合框现在有性别值,但选定的值是空白的,每当我选择一个值并在外部单击时,该值就会消失。
    • @MarijKhan:这是另一个问题。请提出一个新问题并关闭此问题。
    猜你喜欢
    • 2011-12-21
    • 2018-06-09
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多