我试图让一个WPF组合框工作(WPFToolkit Datagrid内),并且我无法正确地对齐所有块。我使用LINQ到实体,而我总的DataContext设置到LINQ查询的结果:WPF组合框不更新源
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>
,一切似乎正常工作,即合适的值显示在组合框中,说得最多的点WH焦点离开组合框。此时,显示的值将返回到原始值,而不是新选择的值。我尝试过使用SelectedItem而不是SelectedValue,但是最终的选择值并未显示在ComboBox中。我有点神秘:似乎这个位应该工作。
编辑3/2/09:我仍然困惑这一点。我应该注意到,在我的数据网格中,任何简单的数据列(例如“DataGridTextColumn”)都会像您期望的那样更新底层数据源。但是对我的任何模板列(“DataGridTemplateColumn”)或ComboBox列(“DataGridComboBoxColumn”)的任何更新都不起作用:底层数据源永远不会更新。当然,其他人试图使用WPF.Toolkit数据网格,并得到这个场景的工作 - 但我已经看了所有的示例代码,我基本上正在做的事情(在我的约束之内解决方案),所以我抓我的头为什么这不起作用。
有什么想法?
我有完全相同的问题。几个小时一直在搞这个。我将绑定更改为TwoWay,尝试更改其他东西。[MSDN](http://msdn.microsoft.com/en-us/library/system.windows.data.binding.updatesourcetrigger.aspx)似乎表明在诸如文本等情况下默认设置为LostFocus。 – 2011-09-20 20:15:26
实际上,当我使用文本框时,它并不是默认为LostFocus。将其设置为PropertyChanged确实解决了这个问题。 – tcables 2012-03-01 18:55:07