0

我有一个静态变量来从数据库中检索组列表。

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}}"来绑定组合框。

4

1 回答 1

0

别客气。

如果您使用的是实体框架,那么只需更新本地对象并让 DbContext/ObjectContext 为您处理更改跟踪就简单多了。那么就不需要记住某人何时重新查询数据库。然后,团队成员可以只关心对象,而不必担心一切是否同步。如果在表单可用时对象上下文的生命周期持续存在,那么您可以设置一个计时器以按设定的时间间隔运行,调用 SaveChanges,并使用数据库中的最新数据重新实例化 DbContext。由于您使用的是 ObservableCollection,这提供了双向绑定,当添加本地对象时,UI 中绑定的任何集合都会将此更改反映给最终用户。

但是,如果 DbContext 的生命周期仅适用于正在执行的“工作单元”,那么每次使用 DbContext 的后续调用都应引入最新数据,因为您将使用 DbContext/ObjectContext 的新实例。有关这方面的更多信息,可以从我之前与另一位对此进行详细说明的用户进行的讨论中找到

于 2013-01-07T03:56:37.190 回答