Я пытаюсь получить комбобокс WPF (внутри WPFToolkit Datagrid), и у меня возникают проблемы с правильной настройкой всех частей. Я использую Linq для Entities, и я устанавливаю общий datacontext для результатов запроса 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 для combobox:
private IEnumerable donationPurposeList;
public IEnumerable DonationPurposeList
{
get
{
if (donationPurposeList == null)
{
donationPurposeList = from dp in entities.DonationPurpose
select dp;
}
return donationPurposeList.ToList();
}
}
XAML для combobox выглядит следующим образом:
<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: Я все еще озадачиваюсь этим. Следует отметить, что в моем datagrid любые простые столбцы данных (например, "DataGridTextColumn" ) обновляют базовый источник данных так же, как вы ожидали. Но любое обновление для любого из моих шаблонных столбцов ( "DataGridTemplateColumn" ) или столбцов ComboBox ( "DataGridComboBoxColumn" ) не работает: базовый источник данных никогда не обновляется. Конечно, другие люди пытались использовать WPF.Toolkit datagrid и получили этот сценарий для работы, но я посмотрел на весь образец кода там, и я делаю в основном то, что он говорит (в рамках ограничений моего решение), поэтому я почесываю голову, почему это не работает.
Любые мысли?