我有一个WPF ComboBox,我将其绑定到一系列自定义对象,每个自定义对象都包含一个IsSelected属性。此属性绑定到其相应的ComboBoxItemIsSelected属性。最初创建列表时,我将特定对象的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/

10-14 22:49