Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Data binding 我需要转换器来解析和绑定枚举吗_Data Binding_Xaml_Enums - Fatal编程技术网

Data binding 我需要转换器来解析和绑定枚举吗

Data binding 我需要转换器来解析和绑定枚举吗,data-binding,xaml,enums,Data Binding,Xaml,Enums,在我的数据库中,我有两个int类型的列(种类和优先级)。我还有一个带有种类和优先级值的枚举。但当我尝试将它们显示到GridViewColumn中时,它显示的是整数,而不是枚举值。我需要转换器吗这里是枚举: public enum Kind { None = 0, Task = 1, Assignment = 2, Quiz = 3, Test = 4, Exam = 5, Project = 6, } public enum Priori

在我的数据库中,我有两个int类型的列(种类和优先级)。我还有一个带有种类和优先级值的枚举。但当我尝试将它们显示到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}" />

如果优先级和种类属性声明为int类型,则是,您将需要一个转换器。WPF无法知道声明为整数的属性是否需要解释为枚举中的值


如果Priority和Kind属性分别声明为type 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
}

(当填充作业对象时,您当然需要将数据库中的int强制转换为种类和优先级,或者使用int backing字段并在getter和setter中执行强制转换。如果您使用的是好的ORM,那么它应该能够为您解决这一问题。)

我不确定您需要从一个示例中获得什么,但我已经扩展了答案,以显示您的数据库对象希望的外观。我考虑过使用IValueConverter?如果您确实希望将业务对象属性保留为int类型,那么您可以使用IValueConverter。在这种情况下,Convert方法的实现只是转换为int,然后转换为enum类型,例如
return(Priority)(int)值。(由于装箱,您需要将强制转换为int。)