C# 从WPF MVVM中的枚举列表填充RadComboBox

C# 从WPF MVVM中的枚举列表填充RadComboBox,c#,wpf,xaml,enums,radcombobox,C#,Wpf,Xaml,Enums,Radcombobox,我找到了一些如何从枚举列表绑定组合框的主题,但我的问题是,我尝试使用MVVM ArhitArchitecture,并让我的视图xaml清除,如下所示: 查看xaml.cs的一部分: 查看xaml my RadComboBox的一部分: 我需要在我的RadComboBox中显示Enum和by selectedValue的所有值,以将选择的特定键与参数一起保存在DB中。如何在组合框视图中显示ViewModel中的值 我知道你可以做如下事情: var items = Enum.GetValues(ty

我找到了一些如何从枚举列表绑定组合框的主题,但我的问题是,我尝试使用MVVM ArhitArchitecture,并让我的视图xaml清除,如下所示:

查看xaml.cs的一部分:

查看xaml my RadComboBox的一部分:

我需要在我的RadComboBox中显示Enum和by selectedValue的所有值,以将选择的特定键与参数一起保存在DB中。如何在组合框视图中显示ViewModel中的值

我知道你可以做如下事情:

var items = Enum.GetValues(typeof(CertificatesTypeEnum)).Cast<CertificatesTypeEnum>().Select(i => new ComboboxItem()
        { Text = Enum.GetName(typeof(gender), i), Value = (int)i}).ToArray<ComboboxItem>();
        //Add the items to your combobox (given that it's called comboBox1)
        RadComboBoxName.Items.AddRange(items);
但这必须在xaml.cs文件中进行,我不希望使用此解决方案,因为在ViewModel中,组合框无法识别,也无法找到


简而言之:在xaml文件中显示ViewModel类中枚举列表的值。

为什么不在视图模型中调用Enum.GetValues方法呢?这是MVVM:

public class GreenCertificatesGroupModel
{
    public IEnumerable<CertificatesTypeEnum> EnumValues
    {
        get
        {
            var list = Enum.GetValues(typeof(CertificatesTypeEnum)).Cast<CertificatesTypeEnum>();
            return list;
        }

    }

    private CertificatesTypeEnum _selectedItem;

    public CertificatesTypeEnum SelectedItem
    {
        get { return _selectedItem; }
        set { _selectedItem = value; }
    }
}
XAML:


有关如何将ItemsSource绑定到所有枚举值的集合,请参见。此外,您的视图模型应具有所选枚举值的属性,您可以将SelectedItem属性绑定到该属性。这样,值将显示在我的组合框中,但如何保存所选值的特定Id?因为在列表中,我只保存值Enum.GetValues。我尝试了类似int Id=intCertificatesTypeEnum.SelectedItem的方法,但在视图模型中不起作用,您可以这样做:int x=int\u SelectedItem;在xaml中是一个问题。我需要使用SelectedValue={Binding SelectedItem}返回值,这没问题,我可以将Id保存在数据库中,但问题是如果我使用SelectedValue或SelectedItem,在从combobox中选择一个项目后,列表中的所有项目都被隐藏,但值都存在。如果我不使用这两个属性之一,则无法在代码中使用该值,每次返回0。您应该使用SelectedItem并按照我的示例绑定到枚举属性…不要涉及SelectedValue.Done。但这有点奇怪。首先,使用SelectItem={Binding SelectedItem,Mode=TwoWay},然后在我的数据表中更新列的值:dr[Type]=SelectedItem;奇怪的是,property selectedItem有一个字符串值[example estimate],但要将estimate value的键从枚举列表传输到dr[Type],即int。我不知道这是怎么可能的,可能是由于EnumValues公共IEnumerable EnumValues,列表返回所选值的键。
public enum CertificatesTypeEnum {
            Estimat = 1,
            Calculat = 2,
            Facturat = 3
            }
var items = Enum.GetValues(typeof(CertificatesTypeEnum)).Cast<CertificatesTypeEnum>().Select(i => new ComboboxItem()
        { Text = Enum.GetName(typeof(gender), i), Value = (int)i}).ToArray<ComboboxItem>();
        //Add the items to your combobox (given that it's called comboBox1)
        RadComboBoxName.Items.AddRange(items);
public class GreenCertificatesGroupModel
{
    public IEnumerable<CertificatesTypeEnum> EnumValues
    {
        get
        {
            var list = Enum.GetValues(typeof(CertificatesTypeEnum)).Cast<CertificatesTypeEnum>();
            return list;
        }

    }

    private CertificatesTypeEnum _selectedItem;

    public CertificatesTypeEnum SelectedItem
    {
        get { return _selectedItem; }
        set { _selectedItem = value; }
    }
}
<telerik:RadComboBox ItemsSource="{Binding EnumValues}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}" />