WPF DataBinding - 更改ComboBox的SelectedItem不调用ViewModel

时间:2010-10-18 17:14:41

标签: wpf data-binding

以下代码未在我的视图模型中调用SelectedItem的属性设置器。

<ComboBox x:Name="cmbGuaranteeType"  Margin="5,5,5,5" MinWidth="80" 
          ItemsSource="{Binding Source={StaticResource guaranteeTypesKey}}" 
          SelectedItem="{Binding RelativeSource={RelativeSource AncestorType={x:Type wpfToolkit:DataGridRow}}, Path=DataContext.GuaranteeType, Mode=TwoWay}"
      />

视图是绑定到ViewModel的UserControl。 UserControl有一个WpfToolkit数据网格,它绑定到ViewModel上的ObservableCollection。 ObservableCollection由List<T>项组成。上面的组合框绑定到其中一个T项上的“GuaranteeType”属性,如下所示:

public GuaranteeType? GuaranteeType
{
    get { return _guaranteeType; }
    set { _guaranteeType = value; NotifyPropertyChanged(ConstGuaranteeType); }
}

加载UserControl时,将调用GuaranteeType属性的getter并正确设置SelectedItem。但是,当我单击ComboBox并尝试更改SelectedItem时,永远不会调用GuarenteeType属性的setter。

此外,我在XAML中针对View的代码隐藏实现了SelectionChanged="cmbGuaranteeType_SelectionChanged",当视图加载时,SelectionChanged方法被调用一次,但是当我尝试更改所选项目时释放鼠标时不会调用它组合框。

1 个答案:

答案 0 :(得分:0)

我为这样一个模糊的答案道歉,但我之前看到过这种情况,我似乎记得它与网格的click事件有关,解除了SelectedItem的绑定。绑定单选按钮时会发生类似的事情。

对于组合框我基本上总是默认使用ListCollectionView来公开底层的observable集合并像这样设置XAML:

<ComboBox ItemsSource="{Binding ListCollectionViewPropertyHere}" IsSynchronizedWithCurrentItem="True"/>

然后,如果您需要通过点击通知,如果您正在轮询或订阅ListCollectionViewPropertyHere.CurrentItem事件,则可以从代码中获取ListCollectionViewPropertyHere.CurrentItemChanged