2

我有一个ComboBox绑定到自定义对象列表的 WPF,每个自定义对象都包含一个IsSelected属性。此属性绑定到其对应ComboBoxItem的 'IsSelected属性。最初创建列表时,我将特定对象的IsSelected属性设置为true,期望在最初显示 ComboBox 时选择此项。但是,ComboBox 始终将列表中的第一项显示为选中状态,无论其绑定列表中的哪个对象的IsSelected属性设置为true

我知道绑定工作正常,因为当我单击ComboBox它并展开以显示所有可用选项时,ComboBox更新以显示正确的选定项目。

这是定义我的ComboBox. 它在 a 中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>
4

2 回答 2

3

尝试删除IsSynchronizedWithCurrentItem="True". 该设置告诉控件使用CurrentItem绑定集合的 generated ICollectionView,默认为列表中的第一项。如果你想看看它在做什么,你可以在代码中使用这个视图,CollectionViewSource.GetDefaultView(YearList)然后查看或更改当前项目。

于 2013-06-27T14:12:27.937 回答
0

尝试绑定到SelectedItem属性,默认情况下ComboBox不会选择第一个项目,而是您的数据绑定源:

<ComboBox ItemsSource="{Binding YearList, RelativeSource={RelativeSource AncestorType=Window}}" SelectedItem="{Binding <YourDefinedSelectedItemProperty>, RelativeSource={RelativeSource AncestorType=Window}}">

希望这可以帮助。

于 2013-07-01T06:40:42.377 回答