我有一个静态变量来从数据库中检索组列表。
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 的属性,以便我对combobox的绑定再次起作用。知道如何实现这个目标吗?
作为旁注,我使用这种方法,所以我只需要编写一次代码从数据库中检索组列表,并删除在后面的代码上写多行的必要性。使用这种方法,我只需要 ItemsSource =“{Binding Source = {x:Static wpf:Group.GroupList}}”与组合框绑定。
答案 0 :(得分:0)
欢迎你。
如果您正在使用实体框架,则更新本地对象并让DbContext / ObjectContext为您处理更改跟踪要简单得多。然后没有必要记住有人想要重新查询数据库。然后,团队成员可以只关注对象,而不必担心一切都在同步。如果在表单可用时对象上下文生命周期是持久的,那么您可以将计时器设置为以设置的间隔运行,调用SaveChanges,并使用数据库中的最新数据重新实例化DbContext。由于您正在使用ObservableCollection,因此这提供了双向绑定,并且在添加本地对象时,UI中绑定的任何集合都将向最终用户反映此更改。
但是,如果DbContext的生命周期仅用于正在执行的“工作单元”,则每次使用DbContext的后续调用都应该引入最新数据,因为您将使用DbContext / ObjectContext的新实例。有关这方面的更多信息,请参阅我之前与另一位详细阐述此Here
用户的讨论。