使用MVVM如何查看ComboBox是否更改了所选值?

时间:2010-10-03 21:07:24

标签: wpf events data-binding mvvm

我有一个包含2个组合框的视图(称为ParentTypeCombo和ChildTypeCombo)。这两个组合框都具有相同的支持下拉列表(称为WorkItemTypes)。

使用MVVM如何知道这些组合框的值何时更改?我已将它们绑定到属性(称为ParentType和ChildType)。但是我记得,WPF不会调用我的二传手。

我不想在组合框上关闭事件,因为这将在后面的代码中,而不是视图模型。

(我看到一个使用ObservableCollection的example。但我承认我不理解它。我使用了一个名为 CollectionViewSource 的值,它没有解释它是什么或在哪里获得它。)

2 个答案:

答案 0 :(得分:1)

将SelectedItem绑定到ViewModel中父属和子级

的属性
<ComboBox SelectedItem="{Binding ParentSelectedItem}" ... />

// VM

public WorkItemType ParentSelectedItem
{
    get { return _parentSelectedItem; }
    set
    {
        if(value != _parentSelectedItem)
        {
            //HERE you know it has changed value.
            _parentSelectedItem = value;
            RaisePropertyChanged("ParentSelectedItem");
        }
    }
  }

此外,您只能在视图模型上拥有一个集合,并将它们绑定到两个组合框。

答案 1 :(得分:0)

将ComboBox IsSyncronyzedWithCurrentItem属性设置为true,而不是在你的vm上,调用此CollectionViewSource.GetDefualtView([你的工作项类型]),返回类型是ICollectionView或类似的东西,它有一个当前更改的事件。