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

どういたしまして。

Entity Frameworkを使用している場合は、ローカルオブジェクトを更新し、DbContext/ObjectContextに変更の追跡を処理させる方がはるかに簡単です。そうすれば、誰かがいつデータベースを再クエリすることになっているのかを覚えておく必要はありません。チームメンバーは、オブジェクトのみに関心を持つことができ、すべてが同期していることを心配する必要はありません。フォームが使用可能である間、オブジェクトコンテキストの有効期間が持続する場合は、タイマーを設定して設定された間隔で実行し、SaveChangesを呼び出して、データベースからの最新データでDbContextを再インスタンス化できます。ObservableCollectionを使用しているため、これにより双方向のバインドが提供され、ローカルオブジェクトが追加されると、UIでコレクションがバインドされるものはすべて、この変更がエンドユーザーにも反映されます。

ただし、DbContextの存続期間が実行中の「作業単位」のみである場合、DbContext / ObjectContextの新しいインスタンスを使用するため、DbContextを使用した後続の各呼び出しで最新のデータを取り込む必要があります。これについての詳細は、これについて詳しく説明した別のユーザーとの以前のディスカッションから見つけることができます

于 2013-01-07T03:56:37.190 に答える