2010-06-20 10 views
6

Quando faccio clic su una cella nel mio DataGridComboBoxColumn il ComboBox diventa visibile e posso selezionare gli elementi. Quando ho selezionato un oggetto è visibile nella parte superiore che va bene. Ma quando la cella aka ComboBox perde il focus perché faccio clic su qualcosa di diverso in DataGrid, non c'è più nessun oggetto/testo visibile nella cella che ho selezionato in precedenza.DataGridComboBoxColumn perde il suo contenuto quando la selezione cambia

Come posso mantenere quella selezione/testo selezionato?

thats il mio codice:

<DataGridComboBoxColumn 
      Width="*" 
      Header="Monday" 
      DisplayMemberPath="SchoolclassName" 
      SelectedValueBinding="{Binding SchoolclassCodeMonday}" 
      ItemsSource="{Binding Source={StaticResource ClassCodes}}"> 

    <DataGridComboBoxColumn.ElementStyle> 
     <Style TargetType="ComboBox"> 
      <Setter Property="IsSynchronizedWithCurrentItem" Value="False" /> 
      <Setter Property="ItemsSource" 
        Value="{Binding Source={StaticResource ClassCodes}}" /> 
     </Style> 
    </DataGridComboBoxColumn.ElementStyle> 

    <DataGridComboBoxColumn.EditingElementStyle>     
     <Style TargetType="ComboBox"> 
      <Setter Property="ItemsSource" 
        Value="{Binding Source={StaticResource ClassCodes}}" /> 
      <Setter Property="IsDropDownOpen" Value="True" /> 
     </Style>     
    </DataGridComboBoxColumn.EditingElementStyle> 
</DataGridComboBoxColumn> 

sembra esserci una soluzione per il mio problema: http://wpf.codeplex.com/Thread/View.aspx?ThreadId=46627 (scorrimento verso il basso), ma non riesco a trasferire la soluzione al mio problema. Perché la configurazione del mio modello è abbastanza diversa.

SchoolclassName è una proprietà stringa nel Schoolclass.cs SchoolclassCodeMonday è una proprietà stringa nel TimeTable.cs ClassCodes alias SchoolclassCodes è una proprietà di tipo ObservableCollection | Schoolclass |

Qualcuno sa come risolvere il binding?

+1

@ sul ragazzo che ha votato uno DisplayMemberPath = "SchoolclassName" Quanto sopra è stato codice esistente: il seguito ho aggiunto e ora lo SchoolclassCode rimane nella cella quando lascio la casella combinata. Normalmente si utilizza un ID per SelectedValuePath ma il mio "ID" è SchoolClassCode che è già univoco. SelectedValuePath = "SchoolclassName" Semplicemente funziona per me ..., non ho una spiegazione migliore o conoscenza più tecnica privilegiate ma si può leggere qui che mi ha aiutato un po ': http: //blogs.msdn .com/b/vinsibal/archive/2008/10/31/WPF-datagrid-DataGridComboBoxColumn-V1-intro.aspx – msfanboy

risposta

1

So che probabilmente non è più necessario ma forse aiuterà qualcun altro. Il tuo ComboBox non dovrebbe aggiornare l'associazione quando viene cambiata? per esempio.

SelectedValueBinding="{Binding SchoolclassCodeMonday}" 

sarebbe:

SelectedValueBinding="{Binding SchoolclassCodeMonday, 
Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 

anche assicurarsi che si sta sparando una notifica quando la proprietà viene modificata dal codice sulla vostra collezione osservabile.