我是否需要转换器来解析和绑定枚举

时间:2010-01-31 02:40:20

标签: data-binding xaml enums

在我的数据库中,我有一个类型为int的2列(Kind和Priority)。我也有一个具有Kind和Priority值的枚举。但是当我尝试将它们显示到GridViewColumn中时,它会显示整数而不是枚举值。我需要转换器这是枚举:

public enum Kind
{
    None = 0,
    Task = 1,
    Assignment = 2,
    Quiz = 3,
    Test = 4,
    Exam = 5,
    Project = 6,

}
public enum Priority
{
    None = 0,
    Low = 1,
    Medium = 2,
    High = 3,
    Top = 4,
}

我的XAML:

<GridViewColumn x:Name="PriorityColumn" Header="Priority" Width="60" DisplayMemberBinding="{Binding Path=Priority}" />
<GridViewColumn x:Name="KindColumn" Header="Kind" Width="60" DisplayMemberBinding="{Binding Path=Kind}" />

1 个答案:

答案 0 :(得分:1)

如果Priority和Kind属性声明为int类型,那么是的,您将需要一个转换器。 WPF无法知道声明为整数的属性需要被解释为枚举中的值。

如果Priority和Kind属性分别声明为Priority和Kind类型,那么它应该正常工作:WPF通过调用它们上的ToString()来显示枚举,这将导致枚举值的名称。

例如:

// As per your question
public enum Kind { ... }
public enum Priority { ... }

// Your database object
public class Job : INotifyPropertyChanged
{
  public Kind Kind { get ... set ... }             // note Kind not int
  public Priority Priority { get ... set ... }     // note Priority not int
}

(当填充Job对象时,您当然需要将从数据库中出来的整数转换为Kind和Priority,或者您坚持使用int backing字段并在getter和setter中进行强制转换。如果您正在使用一个好的ORM然后它应该能够为你照顾这个。)