2013-06-27 2 views
2

У меня есть WPF ComboBox, который я привязываю к списку пользовательских объектов, каждый из которых содержит свойство IsSelected. Это свойство связано с его соответствующим ComboBoxItemIsSelected. При первоначальном создании списка я устанавливаю свойство IsSelected конкретного объекта в true с ожиданием, что этот элемент будет выбран, когда первоначально отображается ComboBox. Тем не менее, ComboBox всегда показывает первый элемент в списке как выбранный, независимо от того, какой объект в его списке перечней имеет свой IsSelected свойство, установленное на true.WPF 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> 

ответ

3

IsSynchronizedWithCurrentItem="True" Попробуйте удалить. Этот параметр сообщает элементу управления использовать CurrentItem на созданном связанным сборником ICollectionView, который по умолчанию соответствует первому элементу в списке. Если вы хотите посмотреть, что вы делаете, вы можете играть с этим представлением в коде, используя CollectionViewSource.GetDefaultView(YearList), а затем просматривая или меняя текущий элемент.

+0

Спасибо за ваш ответ, но установка 'IsSynchronizedWithCurrentItem' в' false' приводит к тому, что 'ComboBox' первоначально показывает, что элементы не выбраны (это пусто). –

0

Попробуйте связывание с SelectedItem собственности, ComboBox не будет выбрать первый пункт по умолчанию, но ваш источник привязка данных:

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

Надеется, что это помогает.