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

Populate RadComboBox from enum list in WPF MVVM

我找到了一些主题 "How to bind a combobox from enum list",但我的问题是我尝试使用 MVVM 架构并让我的视图 (xaml) 清晰,如下所示:

部分视图 (xaml.cs):

public partial class GreenCertificatesStockForm : Erp.Core.Wpf.BaseWindow
    {
        private Models.GreenCertificatesGroupModel model;
        public GreenCertificatesStockForm()
        {
            model = new Models.GreenCertificatesGroupModel();

            this.DataContext = model;

            InitializeComponent();

            model.LoadForm(); // propose some dates for my form
            model.RequestClose += () => { Close(); };
        }
    }

部分视图 (xaml) 我的 RadComboBox:

<telerik:RadComboBox Name="certificatesTypeRadComboBox"
                      Margin="5 2 0 2"  Width="150"
                      SelectedValue="{Binding CertificatesTypeEnum , Mode=TwoWay, 
                                                ValidatesOnDataErrors=True, 
                                                ValidatesOnExceptions=True, 
                                                NotifyOnValidationError=True}"
                      ItemSource="{Binding }"
                      SelectedItem="{Binding }"
                      telerik:StyleManager.Theme="Office_Blue" BorderBrush="#FF707070" Background="#FFDDDDDD" 
                                >

            </telerik:RadComboBox>

所以,我的枚举列表是在我的 ViewModel (class.cs) 中创建的:

public enum CertificatesTypeEnum {
            Estimat = 1,
            Calculat = 2,
            Facturat = 3
            }

我需要在我的 RadComboBox 中显示枚举的所有值,并通过 selectedValue 将特定的选择键保存在数据库中(这带有一个参数)。如何将 ViewModel 中的值显示到 ComboBox(视图)中?

我知道可以做类似的事情:

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 class 的枚举列表的值。

为什么不直接在视图模型中调用 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:

<telerik:RadComboBox ItemsSource="{Binding EnumValues}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}" />