2012-02-13 8 views
2

コレクションのObservableCollectionからデータベース:更新私は現在EnterpriseLibrary 5.0とMVVMで働いています

I持っている(私は/編集カテゴリを追加/削除することができます)編集可能なコンボボックスにバインドさObservableCollection ListCategories<Category>プロパティ:

I

public ObservableCollection<Category> ListCategories 
     { 
      get 
      { 
       return listCategories; 
      } 

      set 
      { 
       listCategories = value; 
      } 
     } 
    var categories = sdb.ExecuteSprocAccessor <Category> ("Get_Categories_List"); 

       ListCategories = categories.ToObservableCollection <Category>(); 

私の質問:コレクション内のすべての変更後

、どのようにUに次のコードを持っていますデータベースをpdateし直しますか?適切な方法はのリポジトリパターンの背後にあるDBアクセス層持つことである

おかげ

+0

なし、単純なプロパティ – HichemSeeSharp

答えて

1

:あなたのドメインタイプカテゴリでこれを実装し、その後

public interface IRepository<T> 
{ 
    IEnumerable<T> GetAll(); 
    T GetById(int id); 
    void Save(T saveThis); 
    void Delete(T deleteThis); 
} 

を(私はそれがドメイン型だと仮定しているとORMによって生成されていないタイプ

public interface ICategoryRepository : IRepository<Category> 
{ 
    // add any methods that are needed to act on this specific repo 
} 

このICategoryRepositoryにビューモデルに依存関係を設定し;

private readonly ICategoryRepository _categoryRepo; 

public ViewModel(ICategoryRepository categoryRepo) 
{ 
    _categoryRepo = categoryRepo; 
} 

次に、あなたのViewModelからのこの依存関係に基づいて、あなたのViewModelはあなたが暗示しているように思われるデータベースを直接呼び出すべきではない(SHOULD NOT)。

あなたのコード:

sdb.ExecuteSprocAccessor <Category> ("Get_Categories_List"); 

は、リポジトリのGETALL()内に存在する必要があります。それをViewModelから移動します。

監視可能なコレクションのあなたの設定がCTRに行うべきである。これに

ListCategories = categories.ToObservableCollection <Category>(); 

public ViewModel(ICategoryRepository categoryRepo) 
{ 
    _categoryRepo = categoryRepo; 
    var categories = _categoryRepo.GetAll(); 
    ListCategories = categories.ToObservableCollection <Category>(); 
} 
+0

おかげマークは、通常、私は文句を言わないデータベースを呼び出しませんViewModelから、私はちょうどこの問題に焦点を当てていた、私は目の下にすべてを持っていたかった。私が言おうとしていたことは、DataSetを作成してその更新を行い、それが可能であればDataAdapterを介してデータベースを更新することです – HichemSeeSharp

関連する問題