2011-07-25 83 views
0

我正在使用LINQ-to-Entity模型附加到我的数据库。我可以使用LINQ进行常规绑定而没有任何问题,例如:如何使用LINQ-to-Entity对象实现INotifyPropertyChanged

Dim db As New myEntityModel 
dim myCustomers As New Customers 

myCustomers=db.Customers.ToList 

dim myItemSource = From c in myCustomers 
        Select c 

myComboBox.ItemsSource = myItemSource 

简单!但我的问题是我如何实现INotifyPropertyChanged,以便我绑定的控件在数据源更改时自动更新?

+0

你的意思是实体框架?或Linq到Sql?你有没有尝试使用POCO? –

+0

我正在使用实体框架 - LINQ to Entities。我不确定POCO是什么,尽管我已经看到它在我的这个问题的详尽搜索中提到。 –

回答

0

您的代码不作一大堆的道理:-)

第一:

dim myItemSource = From c in myCustomers 
        Select c 

不需要该广告中的所有,你可以改变的最后一行到这一点:myComboBox.ItemsSource = myCustomers。无需myItemSource。这可以进一步简化为myComboBox.ItemsSource = db.Customers.ToList。也不需要myCustomers

第二个:
您希望您的组合框在客户更改时更新。那么为什么你不直接绑定到db.Customers,而是一个永远不会改变的静态列表? db.Customers.ToList将创建db.Customers的内容快照。当更新db.Customers时,它不会更新。

结论: 您的代码应该是这样的:

Dim db As New myEntityModel 
myComboBox.ItemsSource = db.Customers 
+0

Hi @Daniel Hilgarth。 DUH!感谢代码简化!有时候,当你寻找复杂性时,你会错过最简单的解决方案!代码现在看起来更好,但它仍然不起作用。当我运行该程序时,ComboBox显示我的客户没问题,但是当我更改数据库中的数据时,ComboBox _remain中的客户不变。我究竟做错了什么?我在** ** XAML中使用** DisplayMemberPath = CustomerName ** ** –

+0

@Jason:您是直接在数据库中还是在实体框架中更改客户?当其他人更改数据库时,您的实体上下文不会**自动更新。你需要重新查询它。 –

+0

Hi @Daniel Hilgarth。我直接在数据库中进行更改,而不仅仅是在框架中,就像我的问题所述。每当数据库发生更改时,我都需要在ComboBox中自动更改项目源。 –

相关问题