Tôi đang cố gắng để có được một combobox WPF làm việc (bên trong WPFToolkit Datagrid), và tôi gặp khó khăn khi nhận được tất cả các mảnh liên kết chính xác. Tôi đang sử dụng LINQ to Entities, và tôi đang thiết lập các DataContext tổng thể để kết quả của một truy vấn LINQ:WPF ComboBox không cập nhật nguồn
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 };
}
Tôi cũng có một tài sản trang trong code-behind của tôi cung cấp các ItemsSource cho combobox:
private IEnumerable donationPurposeList;
public IEnumerable DonationPurposeList
{
get
{
if (donationPurposeList == null)
{
donationPurposeList = from dp in entities.DonationPurpose
select dp;
}
return donationPurposeList.ToList();
}
}
các XAML cho combobox trông như thế này:
<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>
Và tất cả mọi thứ dường như làm việc một cách chính xác, ví dụ, các giá trị thích hợp được hiển thị trong ComboBox, phải lên đến wh điểm ere tập trung lá ComboBox. Tại thời điểm đó, giá trị được hiển thị trở về giá trị ban đầu, không phải giá trị mới được chọn. Tôi đã thử bằng cách sử dụng SelectedItem thay vì SelectedValue, nhưng kết thúc với giá trị được chọn không hiển thị trong ComboBox. Tôi khá là hoang mang: có vẻ như việc này nên có tác dụng.
Đã chỉnh sửa 3/2/09: Tôi vẫn đang bối rối về điều này. Tôi nên lưu ý rằng trong dữ liệu của tôi, bất kỳ cột dữ liệu đơn giản nào (ví dụ: "DataGridTextColumn") cập nhật nguồn dữ liệu cơ bản giống như bạn mong đợi. Nhưng bất kỳ cập nhật cho bất kỳ cột templated của tôi ("DataGridTemplateColumn") hoặc ComboBox cột ("DataGridComboBoxColumn") không hoạt động: nguồn dữ liệu cơ bản không bao giờ được cập nhật. Chắc chắn những người khác đã cố gắng sử dụng dữ liệu WPF.Toolkit và nhận kịch bản này để làm việc - nhưng tôi đã xem xét tất cả các mã mẫu ở đó, và tôi đang làm cơ bản những gì nó nói để làm (trong các ràng buộc của tôi giải pháp), vì vậy tôi gãi đầu vì sao điều này không hiệu quả.
Mọi suy nghĩ?
Tôi đã có chính xác cùng một vấn đề. Đã rối tung với điều này trong nhiều giờ. Tôi đã thay đổi ràng buộc thành TwoWay, cố gắng thay đổi toàn bộ các thứ khác. [MSDN] (http://msdn.microsoft.com/en-us/library/system.windows.data.binding.updatesourcetrigger.aspx) dường như cho biết mặc định được đặt thành LostFocus trong các trường hợp như Văn bản. –
Trên thực tế, nó không phải là mặc định để LostFocus cho tôi khi tôi sử dụng một hộp văn bản. Đặt nó thành PropertyChanged sẽ sửa lỗi này. – tcables
Tuyệt vời !! Samething hoạt động ngay cả đối với SelectedItem ràng buộc – Adarsha