2009-12-14 5 views
5

Ciao Sto usando il DataGrid di WPF e sto cercando di far funzionare la Colonna ComboBox.WPF DataGridComboBoxColumn

<tk:DataGridComboBoxColumn Header="GroupLevel" 
          DisplayMemberPath="Type" 
          SelectedItemBinding="{Binding Path=GroupLevel}" 
          > 
    <tk:DataGridComboBoxColumn.EditingElementStyle> 
     <Style TargetType="ComboBox"> 
      <Setter Property="ItemsSource" Value="{Binding Path=GroupLevel.Group.GroupLevels}" /> 
     </Style> 
    </tk:DataGridComboBoxColumn.EditingElementStyle> 

</tk:DataGridComboBoxColumn> 

Quando guardo la griglia, la colonna è vuota, come il suo non si utilizza il percorso di membro del display. Ma una volta cliccato nella colonna, la casella combinata appare e mostra tutti gli elementi nella mia ItemsSource e ne seleziona la giusta, quindi so che i collegamenti funzionano correttamente, anche DisplayMemberPath. È proprio quando non sto modificando la cella che appare vuota.

Ho perso una proprietà dove?

Grazie, Raul

risposta

14

im abbastanza sicuro che questo è perché quando non si è in modalità di modifica la colonna non ha una fonte di oggetti e un ComboBox non puoi avere un elemento selezionato senza una fonte di elementi. non appena vai in modalità di modifica, la tua colonna riceve i suoi articoli e tutto è bello. si può risolvere questo problema specificando una fonte di voci in questo modo: -

<tk:DataGridComboBoxColumn.ElementStyle> 
    <Style TargetType="ComboBox"> 
     <Setter Property="ItemsSource" Value="{Binding Path=GroupLevel.Group.GroupLevels}" /> 
    </Style> 
</tk:DataGridComboBoxColumn.ElementStyle> 

allora sia il vostro elemento editing e il vostro elemento (non-editing) ha la stessa ItemsSource

+0

Non ci credereste quanto sia difficile questo è stato quello di trova. Non sapevo che lo stato della modalità non di modifica contenesse ancora una casella combinata. Pensavo fosse solo un blocco di testo. Grazie ancora! – HaxElit

+1

è un po 'strano. Ho trovato che lavorare con il codice per il datagrid ti consente davvero di fare qualche scherzo. il codice da esaminare è la funzione GenerateElement in DatagridComboColumn, hanno una casella combinata solo di visualizzazione. Importo le origini di DataGrid nel mio progetto e quando ho finito lo sostituisco con un riferimento a una DLL diritta. –

+3

Sai se è possibile avere la comboBox visibile anche in ViewMode. Voglio che i miei utenti lo sappiano, questo è un ComboBox – MBen