2011-09-29 10 views
10

Szukam sposobu na wybranie pierwszego elementu, gdy dane staną się dostępne. Ale jeśli nie ma danych w źródle, nie wybieraj. Jak to zrobić ? Jestem bardzo nowy w WPF.Comboxbox automatycznie wybiera pierwszą pozycję, gdy dane są dostępne

<ComboBox Grid.Row="5" Grid.Column="1" 
      IsEditable="False" 
      ItemsSource="{Binding Source={x:Static l:DirectXResolution.Resolutions}}" 
      ToolTip="Resolutions"> 
    <ComboBox.Resources> 
     <l:ResolutionConverter x:Key="resolutionConverter"/> 
    </ComboBox.Resources> 
    <ComboBox.Text> 
     <MultiBinding Converter="{StaticResource resolutionConverter}"> 
      <Binding Path="GameWidth" Mode="OneWayToSource"/> 
      <Binding Path="GameHeight" Mode="OneWayToSource"/> 
     </MultiBinding> 
    </ComboBox.Text> 
</ComboBox> 
+0

Czy jest dostępny jakikolwiek rodzaj powiadomienia o zmianie ze źródła zasobów przedmiotu (uchwały)? – RQDQ

+0

źródłem pozycji jest po prostu lista . Nie wiem, czy ma powiadomienie o zmianie. Jak dodać powiadomienie o zmianie? –

Odpowiedz

22

Najprostszym sposobem jest użycie SelectedIndex. Proszę sprawdzić poniższy kod.

<ComboBox Grid.Row="5" Grid.Column="1" 
      IsEditable="False" 
      ItemsSource="{Binding Source={x:Static l:DirectXResolution.Resolutions}}" 
      ToolTip="Resolutions" 
      SelectedIndex="0"> 
.... 
+8

nie do końca poprawne. Potrzebuję IsSynchronizedWithCurrentItem = "true", jeśli lista pozycji zostanie ponownie wypełniona, inaczej nie wybierze automatycznie pierwszego indeksu. – user384080

1

DirectXResolution.Resolutions musi być ObservableCollection<T> przeciwnym razie ComboBox nie zostanie zaktualizowany, gdy dane będą dostępne. Możesz użyć zdarzenia CollectionChanged z ObservableCollection<T>, aby wybrać pierwszy element.

Jeśli DirectXResolution.Resolutions nie ObservableCollection jest stworzenie opakowania dla tej kolekcji i dziedziczyć INotifyCollectionChanged

0

Oto jak to zrobić w kodzie:

Items.CollectionChanged += (sender, e) => 
{ 
    if (!Items.Contains(Selected)) 
    { 
     Selected = Items.FirstOrDefault(); 
    } 
}; 

Items jest ObservableCollection, które mogą być aktualizowane. Selected jest właściwością dwukierunkową wybranego elementu. Ten kod powinien zostać umieszczony w konstruktorze twojego modelu widoku.

Powiązane problemy