Estoy tratando de obtener un combobox WPF funcionando (dentro de WPFToolkit Datagrid), y tengo problemas para alinear todas las piezas correctamente. Estoy usando LINQ a Entidades, y estoy estableciendo el DataContext en general a los resultados de una consulta LINQ:WPF ComboBox no actualiza fuente
private void LoadDonationGrid()
{
donationGrid.ItemsSource = from donations in entities.Donation
.Include("Family")
.Include("PledgeYear")
.Include("DonationPurpose")
from donationPurposes in entities.DonationPurpose
select new { donations, donationPurposes };
}
también tengo una propiedad en mi página de código subyacente que proporciona la ItemsSource para el cuadro combinado:
private IEnumerable donationPurposeList;
public IEnumerable DonationPurposeList
{
get
{
if (donationPurposeList == null)
{
donationPurposeList = from dp in entities.DonationPurpose
select dp;
}
return donationPurposeList.ToList();
}
}
el XAML para el cuadro combinado tiene el siguiente aspecto:
<tk:DataGridTemplateColumn Header="Purpose">
<tk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=donations.DonationPurpose.Description, Mode=TwoWay}" />
</DataTemplate>
</tk:DataGridTemplateColumn.CellTemplate>
<tk:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox Name="cboDonationPurpose"
SelectedValue="{Binding Path=donations.DonationPurposeID, Mode=TwoWay}"
ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type Page},Mode=FindAncestor},Path=DonationPurposeList}"
DisplayMemberPath="Description"
SelectedValuePath="DonationPurposeID"
/>
</DataTemplate>
</tk:DataGridTemplateColumn.CellEditingTemplate>
</tk:DataGridTemplateColumn>
Y todo parece funcionar correctamente, es decir, los valores correspondientes se muestran en el cuadro combinado, hasta los Puntos WH El enfoque deja el ComboBox. En ese punto, el valor mostrado vuelve al valor original, no al valor recién seleccionado. He intentado usar SelectedItem en lugar de SelectedValue, pero eso termina con el valor seleccionado que no se muestra en el ComboBox. Estoy un poco desconcertado: parece que este bit debería estar funcionando.
Editado el 2/03/09: Todavía estoy desconcertado por esto. Debo señalar que en mi cuadrícula de datos, cualquier columna simple de datos (por ejemplo, "DataGridTextColumn") actualiza la fuente de datos subyacente tal como cabría esperar. Pero cualquier actualización de cualquiera de mis columnas con plantilla ("DataGridTemplateColumn") o columnas ComboBox ("DataGridComboBoxColumn") no funciona: la fuente de datos subyacente nunca se actualiza. Seguramente otras personas han intentado usar la cuadrícula de datos WPF.Toolkit y han conseguido que funcione este escenario, pero he analizado todo el código de muestra, y básicamente estoy haciendo lo que dice que hacer (dentro de las limitaciones de mi solución), así que me estoy rascando la cabeza por qué esto no está funcionando.
¿Alguna idea?
Tuve exactamente el mismo problema. Estuve jugando con esto por horas. Cambié el enlace a TwoWay, intenté cambiar una gran cantidad de otras cosas. [MSDN] (http://msdn.microsoft.com/en-us/library/system.windows.data.binding.updatesourcetrigger.aspx) parece indica que el valor predeterminado está configurado en LostFocus en casos como Texto. –
En realidad, LostFocus no está predeterminado para mí cuando uso un cuadro de texto. Sin embargo, establecerlo en PropertyChanged lo soluciona. – tcables
Excelente !! Lo mismo funciona incluso para el enlace SelectedItem – Adarsha