Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.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
C# 在datagrid中绑定枚举属性的最佳方法_C#_Wpf_Data Binding - Fatal编程技术网

C# 在datagrid中绑定枚举属性的最佳方法

C# 在datagrid中绑定枚举属性的最佳方法,c#,wpf,data-binding,C#,Wpf,Data Binding,将枚举属性绑定到datagrid的最佳方法是什么。目前我正在使用公共属性并从中返回枚举名称。还有其他方法吗 枚举 public enum enStatus { Draft = 1, Published = 2, Started = 3, Completed = 4 } 型号 class ModelA { private int statudId; public string Status { get { return Enum.GetName(type

将枚举属性绑定到datagrid的最佳方法是什么。目前我正在使用公共属性并从中返回枚举名称。还有其他方法吗

枚举

public enum enStatus
{
    Draft = 1,
    Published = 2,
    Started = 3,
    Completed = 4
}
型号

class ModelA
{
  private int statudId;
  public string Status {  get { return Enum.GetName(typeof(enStatus),statudId); }
}
数据网格

<DataGrid Name="dataGrdAssignments" Style="{StaticResource dataGridManageScreens}" SelectedCellsChanged="dataGrdAssignments_SelectedCellsChanged">
      <DataGrid.Columns>
        <DataGridTextColumn Header="Status" Width="150" Binding="{Binding Status}" ElementStyle="{StaticResource gridElementStyle}" EditingElementStyle="{StaticResource gridEditElementStyle}">
        </DataGridTextColumn>
      </DataGrid.Columns>
</DataGrid>

您的方法可行,但我更喜欢使用绑定转换器来清理ViewModel

public class EnumConverter : IValueConverter
{

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return ((Enum)value).ToString()
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return  null;
    }
}
在您的XAML中,类似这样的内容:

Binding="{Binding Status, Converter="{StaticResource ResourceKey=enumConverter}}" 

不要忘了在xaml文件的参考资料部分声明“enumConverter”(或者您将决定如何命名它)。

注意,对于每种
enum
类型,您都不需要转换器。强制转换到基类
Enum
工作正常:
((Enum)值)。ToString()
强制转换enStatus正在工作,但在Enum
返回((Enum)值)的情况下无效强制转换异常。ToString()
异常说明了什么?无法将“System.Int32”类型的对象强制转换为“type”系统。Enum“确保绑定到Enum”(例如:public-enStatus-CurrentStatus{get;set;}),而不是像public-int那样的int。