Ich versuche, eine WPF Combobox arbeiten (innerhalb der WPFToolkit Datagrid), und ich habe Probleme, alle Teile richtig ausgerichtet. Ich verwende Linq to Entities, und ich bin die Gesamtdatacontext auf die Ergebnisse einer Linq-Abfrage einstellen:WPF ComboBox nicht Update-Quelle
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 };
}
Ich habe auch eine Seite Eigenschaft in meinem Code-behind, die die Itemssource für die Combobox bietet:
private IEnumerable donationPurposeList;
public IEnumerable DonationPurposeList
{
get
{
if (donationPurposeList == null)
{
donationPurposeList = from dp in entities.DonationPurpose
select dp;
}
return donationPurposeList.ToList();
}
}
die XAML für die Combobox sieht wie folgt aus:
<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>
Und alles scheint richtig zu funktionieren, dh die entsprechenden Werte in der ComboBox angezeigt werden, bis hin zu dem Punkt, wh Der Fokus verlässt die ComboBox. An diesem Punkt wird der angezeigte Wert auf den ursprünglichen Wert und nicht auf den neu ausgewählten Wert zurückgesetzt. Ich habe versucht, SelectedItem anstelle von SelectedValue zu verwenden, aber das endet damit, dass der ausgewählte Wert nicht in der ComboBox angezeigt wird. Ich bin irgendwie verwirrt: Es scheint, als ob dieses Bit funktionieren sollte.
Bearbeitet 02.03.09: Ich bin immer noch rätselhaft darüber. Ich sollte beachten, dass in meinem Datagrid alle einfachen Datenspalten (z. B. "DataGridTextColumn") die zugrunde liegende Datenquelle genau so aktualisieren, wie Sie es erwarten. Aber jede Aktualisierung auf meine Spaltenvorlagen ("DataGridTemplateColumn") oder ComboBox-Spalten ("DataGridComboBoxColumn") funktioniert nicht: Die zugrunde liegende Datenquelle wird nie aktualisiert. Sicherlich haben andere Leute versucht, das WPF.Toolkit-Datagrid zu verwenden und dieses Szenario zum Laufen zu bringen - aber ich habe mir den ganzen Beispielcode angesehen, und ich mache im Grunde, was es zu tun vorgibt (innerhalb der Grenzen meines Lösung), also kratze ich mich am Kopf, warum das nicht funktioniert.
Irgendwelche Gedanken?
Ich hatte genau das gleiche Problem. Ich habe stundenlang damit zu tun gehabt. Ich habe die Bindung an TwoWay geändert und versucht, eine ganze Reihe anderer Dinge zu ändern. [MSDN] (http://msdn.microsoft.com/en-us/library/system.windows.data.binding.updatesourcetrigger.aspx) scheint das zu sein Geben Sie an, dass der Standardwert in Fällen wie Text auf LostFocus gesetzt ist. –
Eigentlich ist es nicht LostFocus für mich, wenn ich eine Textbox benutze. Wenn Sie es auf PropertyChanged setzen, wird dies jedoch behoben. – tcables
Ausgezeichnet !! Samething funktioniert auch für SelectedItem-Bindung – Adarsha