ComboBox中的默认加载值-WPF MVVM

时间:2018-09-23 14:41:01

标签: c# wpf xaml mvvm combobox

我有一个ComboBox,想将ComboBox中的值预先填充为预设值。

我有一个食物类别列表,它是一个名为 ItemCategories 的ObservableCollection,它是一个属性。列表有5种不同的类型。

我还有一个名为ItemCategory的选定类别属性,类型为ItemCategory。

ItemCategory具有两个属性,类别和PK_ItemCategoryId。

到目前为止,这就是我所拥有的

ComboBox XAML

ComboBox Contents RunTime

组合框的ItemSource绑定到ViewModel中的属性。

private ObservableCollection<ItemCategory> _itemCategories;
        public ObservableCollection<ItemCategory> ItemCategories
        {
            get
            { return _itemCategories; }
            set
            {
                _itemCategories = value;
                OnPropertyChanged("ItemCategories");
            }
        }

        private ItemCategory _itemCategory;
        public ItemCategory ItemCategory
        {
            get { return _itemCategory; }
            set
            {
                _itemCategory = value;
                OnPropertyChanged("ItemCategory");
            }
        }

当用户打开应用程序时,我想做的是用列表中的一个项目预填充combox中的值。下面是我要实现的示例。

Goal

如何使用MVVM和WPF来实现这一目标?

2 个答案:

答案 0 :(得分:1)

如果您在ViewModel的ctor中将默认项(例如_itemCategories的第一项)设置为_itemCategory,则应该起作用,或者稍后在您的ItemCategory属性上设置。

它必须是_itemsCategories中的一项-不是ItemCategory的新实例!

答案 1 :(得分:1)

由于您的SelectedItem属性设置为Mode=TwoWay,因此可以在ViewModel中设置属性,如下所示:

//if you imported LINQ
if(ItemCategories != null && ItemCategories.Any())
    ItemCategory = ItemCategories.First();

//without LINQ
if(ItemCategories != null && ItemCategories.Count > 0)
    ItemCategory = ItemCategories[0];

这将获取ItemCategories中的第一项(如果有),并将其设置为SelectedItem

UI将通过OnPropertyChanged()通知。