2010-06-20 15 views
6

Cuando hago clic en una celda en mi DataGridComboBoxColumn, el ComboBox se vuelve visible y puedo seleccionar elementos. Cuando selecciono un elemento, es visible en la parte superior, eso está bien. Pero cuando la célula también conocida como ComboBox pierde su foco porque hago clic en algo diferente en el DataGrid, ya no hay ningún elemento/texto visible en la celda que he seleccionado previamente.DataGridComboBoxColumn pierde su contenido cuando la selección cambia

¿Cómo puedo mantener esa selección/texto seleccionado?

esa es mi código:

<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> 

parece que hay una solución para mi problema: http://wpf.codeplex.com/Thread/View.aspx?ThreadId=46627 (desplazamiento hacia la parte inferior), pero no puedo transferir la solución a mi problema. Porque la configuración de mi modelo es bastante diferente.

SchoolclassName es una propiedad de cadena en Schoolclass.cs SchoolclassCodeMonday es una propiedad de cadena en TimeTable.cs ClassCodes aka SchoolclassCodes es una propiedad de tipo ObservableCollection | schoolclass |

¿Alguien sabe cómo arreglar mi encuadernación?

+1

@Al tipo que votó 1 DisplayMemberPath = "SchoolclassName" lo anterior fue el código existente: el siguiente he añadido y ahora el SchoolclassCode permanece en la celda cuando salga del cuadro combinado. Normalmente utilizas una identificación para el SelectedValuePath pero mi "ID" es el SchoolclassCode que ya es único. SelectedValuePath = "SchoolclassName" Simplemente funciona para mí ..., no tengo una mejor explicación o conocimiento de información privilegiada más técnico, pero se puede leer aquí que me ayudó un poco: http: //blogs.msdn .com/b/vinsibal/archive/2008/10/31/wpf-datagrid-datagridcomboboxcolumn-v1-intro.aspx – msfanboy

Respuesta

1

Sé que probablemente ya no sea necesario, pero tal vez ayudará a otra persona. ¿No necesitaría su ComboBox actualizar el enlace cuando se modifique? p.ej.

SelectedValueBinding="{Binding SchoolclassCodeMonday}" 

sería:

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

También asegúrese de que usted está disparando una notificación cuando la propiedad cambia de código en su colección observable.

Cuestiones relacionadas