我有一个WPF ComboBox
,我将其绑定到一系列自定义对象,每个自定义对象都包含一个IsSelected
属性。此属性绑定到其相应的ComboBoxItem
的IsSelected
属性。最初创建列表时,我将特定对象的IsSelected
属性设置为true
,期望在最初显示ComboBox时会选择此项目。但是,无论绑定列表中的哪个对象的IsSelected
属性设置为true
,ComboBox始终将列表中的第一项显示为选中状态。
我知道绑定工作正常,因为当我单击ComboBox
并展开以显示所有可用选项时,ComboBox
更新为显示正确的所选项目。
这是XAML,用于定义我的ComboBox
。它在DataTemplate
中,并且与页面相关联,并且可以动态添加/删除:
<ComboBox ItemsSource="{Binding DataContext.YearList, RelativeSource={RelativeSource AncestorType=Window}}" IsSynchronizedWithCurrentItem="True">
<ComboBox.ItemContainerStyle>
<Style TargetType="{x:Type ComboBoxItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected}"/>
</Style>
</ComboBox.ItemContainerStyle>
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Label Content="{Binding Object}"/>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
最佳答案
尝试删除IsSynchronizedWithCurrentItem="True"
。该设置告诉控件在绑定集合的生成的CurrentItem
上使用ICollectionView
,该默认值是列表中的第一项。如果要查看其作用,可以使用CollectionViewSource.GetDefaultView(YearList)
在代码中使用此视图,然后查看或更改当前项目。
关于c# - WPF ComboBox最初没有选择正确的项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17345409/