以下代码未在我的视图模型中调用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方法被调用一次,但是当我尝试更改所选项目时释放鼠标时不会调用它组合框。
答案 0 :(得分:0)
我为这样一个模糊的答案道歉,但我之前看到过这种情况,我似乎记得它与网格的click事件有关,解除了SelectedItem的绑定。绑定单选按钮时会发生类似的事情。
对于组合框我基本上总是默认使用ListCollectionView来公开底层的observable集合并像这样设置XAML:
<ComboBox ItemsSource="{Binding ListCollectionViewPropertyHere}" IsSynchronizedWithCurrentItem="True"/>
然后,如果您需要通过点击通知,如果您正在轮询或订阅ListCollectionViewPropertyHere.CurrentItem
事件,则可以从代码中获取ListCollectionViewPropertyHere.CurrentItemChanged
。