我有一个静态变量从数据库中检索组列表。插入数据库后将组合框重新绑定到静态ObservableCollection
public static ObservableCollection<Group> GroupList
{
get
{
return Group.getGroups(); //<-- this retrieve group from database
}
}
然后我将我的组合框绑定到我的xaml上的静态属性。
<ComboBox Name="cmbGroup" VerticalAlignment="Top" Width="120" ItemsSource="{Binding Source={x:Static wpf:Group.GroupList}}" DisplayMemberPath="Name" SelectedValuePath="Id" SelectionChanged="cmbGroup_SelectionChanged" />
直到这一点,一切工作正常。然后,我将新组输入到文本框中,并向数据库中插入1行。成功插入数据库后,我的组合框没有改变。我想要的是我的组合框即刻更新。
据我了解,我需要更新静态GroupList的属性,所以我绑定到组合框再次工作。任何想法如何实现这一目标?
作为一个方面说明,我使用这种方法,所以我只需要编写1次从数据库检索组列表,并删除在后面的代码上写很多行的必要性。通过这种方法,我只需要ItemsSource =“{Binding Source = {x:Static wpf:Group.GroupList}}”与组合框绑定。
当您将新组添加到“文本框”中时,是将其添加到组合框绑定的集合还是将其添加到“你只用数值更新数据库吗?我没有足够的WPF工作,因为绑定可能会比winforms略有不同,但如果你只是在数据库中插入新的值而不更新本地的ObservableCollection,那么你不需要重新加载/刷新集合的值从数据库为了让它认识到有一个新的价值? –
这正是问题所在。组合框绑定的集合不是手动添加的,我不使用代码来调用方法。一切都是通过xaml完成的。据说,我没有添加项目集合后,我插入新的数据到数据库,我不想。我只是想让WPF重新评估Group.GroupList的bindingsource属性。 – vugtis
您的本地ObservableCollection将不会意识到数据库的任何更改,因为上下文只知道附加到它并正在跟踪的实体发生的任何更改。如果您在上下文之外更新数据库,则它不会看到该数据库,并且不会显示新记录,因为它只显示您的本地集合。您需要重新查询数据库或将其添加到本地集合中。你不能手动将它添加到本地集合,然后调用SaveChanges()?然后上下文会自动将它添加到数据库中。 –