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



我找到了一些主题"如何从枚举列表绑定组合框",但我的问题是我尝试使用 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(); };
        }
    }

View (xaml( my 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>

因此,我的枚举列表在我的视图模型(类.cs(中创建为:

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

我需要在我的 RadComboBox 中显示枚举的所有值,并通过 selectedValue 将特定的选择键保存在数据库中(带有参数(。如何将视图模型中的值显示到组合框(视图(中?

我知道可以做这样的事情:

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:

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

最新更新