我正在尝试使 WPF 组合框正常工作(在 WPFToolkit Datagrid 内),但我无法正确对齐所有部分。我正在使用 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 的位置。此时,显示的值将恢复为原始值,而不是新选择的值。我尝试使用 SelectedItem 而不是 SelectedValue,但最终选择的值未显示在 ComboBox 中。我有点迷惑:似乎这点应该起作用。
2009 年 3 月 2 日编辑:我仍然对此感到困惑。我应该注意,在我的数据网格中,任何简单的数据列(例如,“DataGridTextColumn”)都会按照您的预期更新基础数据源。但是对我的任何模板列(“DataGridTemplateColumn”)或 ComboBox 列(“DataGridComboBoxColumn”)的任何更新都不起作用:基础数据源永远不会更新。当然其他人已经尝试使用 WPF.Toolkit 数据网格并让这个场景工作 - 但我已经查看了那里的所有示例代码,并且我基本上按照它所说的去做(在我的约束范围内)解决方案),所以我在摸索为什么这不起作用。
有什么想法吗?