Próbuję uzyskać działanie combobox WPF (wewnątrz WPFToolkit Datagrid) i mam problem z wyrównaniem wszystkich elementów. Używam Linq do podmiotów, a ja ustalaniu ogólnej datacontext do wyników kwerendy LINQ:WPF ComboBox nie aktualizuje źródła
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 };
}
Mam też właściwość strony w moim kodu źródłowego, który zapewnia ItemsSource do combobox:
private IEnumerable donationPurposeList;
public IEnumerable DonationPurposeList
{
get
{
if (donationPurposeList == null)
{
donationPurposeList = from dp in entities.DonationPurpose
select dp;
}
return donationPurposeList.ToList();
}
}
XAML dla combobox wygląda następująco:
<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>
I wszystko wydaje się działać poprawnie, to znaczy, odpowiednie wartości są wyświetlane w ComboBox, aż do punktu WH ere focus opuszcza ComboBox. W tym momencie wyświetlana wartość powraca do pierwotnej wartości, a nie do nowo wybranej wartości. Próbowałem używać SelectedItem zamiast SelectedValue, ale kończy się na wybranej wartości nie pokazano w ComboBox. Jestem trochę zdezorientowany: wygląda na to, że ten kawałek powinien działać.
Edytowane 3/2/09: Nadal zastanawiam się nad tym. Należy zauważyć, że w moim datagrid, wszystkie proste kolumny danych (np. "DataGridTextColumn") aktualizują podstawowe źródło danych tak, jak można się spodziewać. Jednak żadna aktualizacja żadnej z kolumn szablonowych ("DataGridTemplateColumn") ani kolumn ComboBox ("DataGridComboBoxColumn") nie działa: źródłowe źródło danych nigdy nie zostanie zaktualizowane. Z pewnością inni próbowali użyć datagridu WPF.Toolkit i stworzyli ten scenariusz - ale przyjrzałem się wszystkiemu przykładowemu kodowi i robię zasadniczo to, co ma robić (w ramach ograniczeń mojego rozwiązanie), więc drapię się po głowie, dlaczego to nie działa.
Jakieś myśli?
Miałem dokładnie ten sam problem. Robiłem sobie z tym pogawędkę przez wiele godzin. Zmieniłem powiązanie z TwoWay, próbowałem zmienić cały szereg innych rzeczy. Wydaje się, że [MSDN] (http://msdn.microsoft.com/en-us/library/system.windows.data.binding.updatesourcetrigger.aspx) wskazuje, że domyślnym ustawieniem jest LostFocus w przypadkach takich jak Text. –
W rzeczywistości nie domyślam się LostFocus dla mnie, gdy używam pola tekstowego. Ustawienie tego na PropertyChanged rozwiązuje to jednak. – tcables
Doskonały !! Powiązanie działa nawet w przypadku powiązania SelectedItem. – Adarsha