我試圖讓一個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