(WPFToolkit Datagrid 内で) WPF コンボボックスを動作させようとしていますが、すべてのピースを正しく配置するのに問題があります。私は Linq to Entities を使用しており、データコンテキスト全体を 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 に表示されます。その時点で、表示値は、新しく選択した値ではなく、元の値に戻ります。SelectedValue の代わりに SelectedItem を使用してみましたが、選択した値が ComboBox に表示されなくなります。私はちょっと当惑しています: このビットは機能するはずです。
2009 年 3 月 2 日編集: 私はまだこれについて困惑しています。私のデータ グリッドでは、単純なデータ列 ("DataGridTextColumn" など) が、期待どおりに基になるデータ ソースを更新することに注意してください。しかし、テンプレート化された列 ("DataGridTemplateColumn") または ComboBox 列 ("DataGridComboBoxColumn") の更新は機能しません。基になるデータ ソースは更新されません。確かに、他の人々が WPF.Toolkit データグリッドを使用しようとして、このシナリオが機能するようになりました。解決策)、なぜこれが機能しないのか頭を悩ませています。
何かご意見は?