2011-09-29 10 views
10

Sto cercando il modo di selezionare il primo elemento quando i dati sono disponibili. Ma se non ci sono dati nella fonte, allora non selezionare. Come farlo ? Sono molto nuovo a WPF.Comboxbox seleziona automaticamente il primo elemento quando i dati sono disponibili

<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

C'è qualche tipo di notifica di cambiamento disponibile da Itemssource (Risoluzioni)? – RQDQ

+0

la fonte dell'articolo è solo Lista . Non sono sicuro se ha una notifica di modifica. Come aggiungere la notifica di modifica? –

risposta

22

Il modo più semplice è utilizzare SelectedIndex. Per favore, controlla il codice qui sotto.

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

non completamente corretto .. è necessario avere IsSynchronizedWithCurrentItem = "true" se l'elenco degli elementi viene popolato nuovamente altrimenti non selezionerà automaticamente il primo indice. – user384080

1

DirectXResolution.Resolutions deve essere ObservableCollection<T> altrimenti il ​​ComboBox non verranno aggiornati quando i dati diventa disponibile. È possibile utilizzare l'evento CollectionChanged di ObservableCollection<T> per selezionare il primo elemento.

Se DirectXResolution.Resolutions non ObservableCollection è, creare un wrapper per questa collezione e ereditano INotifyCollectionChanged

0

Ecco come farlo in codice:

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

Items è un ObservableCollection che può essere aggiornato. Selected è una proprietà a due vie dell'elemento selezionato. Questo codice dovrebbe essere inserito nel costruttore del tuo modello di visualizzazione.

Problemi correlati