Я пытаюсь заставить работать комбинированный ящик WPF (внутри сетки данных WPFToolkit), и у меня возникают проблемы с выравниванием всех частей правильно. Я использую Linq для сущностей и задаю общий текстовый текст для результатов запроса Linq:
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 };
}
У меня также есть свойство страницы в моем коде позади, которое предоставляет ItemsSource для выпадающего списка:
private IEnumerable donationPurposeList;
public IEnumerable DonationPurposeList
{
get
{
if (donationPurposeList == null)
{
donationPurposeList = from dp in entities.DonationPurpose
select dp;
}
return donationPurposeList.ToList();
}
}
XAML для комбинированного списка выглядит следующим образом:
<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>
И все, кажется, работает правильно, то есть соответствующие значения отображаются в ComboBox, вплоть до точки, где фокус покидает ComboBox. В этот момент отображаемое значение возвращается к исходному значению, а не к вновь выбранному значению. Я попытался использовать SelectedItem вместо SelectedValue, но в итоге выбранное значение не отображается в ComboBox. Я немного озадачен: похоже, этот бит должен работать.
Отредактировано 3/2/09: Я все еще ломаю голову над этим. Я должен отметить, что в моей таблице данных любые простые столбцы данных (например, «DataGridTextColumn») обновляют базовый источник данных так, как вы ожидаете. Но любое обновление любого из моих шаблонных столбцов («DataGridTemplateColumn») или столбцов ComboBox («DataGridComboBoxColumn») не работает: базовый источник данных никогда не обновляется. Конечно, другие люди пытались использовать сетку данных WPF.Toolkit и заставили этот сценарий работать - но я рассмотрел весь пример кода, и я делаю в основном то, что он говорит (в рамках ограничений моего решение), поэтому я почесал голову, почему это не работает.
Есть мысли?