2011-02-04 7 views
0

この状況に適したソリューションは何か聞きたいと思います。WPF MVVM - データベースからモデルを作成する

私はWPFアプリCaliburn.Microフレームワークで使用します。私はSQL Compact DBにアクセスする必要があります。 DBアクセスでは、LINQ TO SQLを使用します。

たとえば、私はcomboBoxコントロールまたはlistBoxコントロールを持っています。 DBからこれらのコントロールの読み込み項目が必要です。

私はDBへのアクセスで簡単なクラスを作成します。

このクラスにMEFを挿入してモデルクラスを表示します。 コンボボックスへのアイテムの読み込み時に、ビューモデルクラスのDBアクセス時にクラスからのメソッドを使用しています。

[Export(typeof(ILogOnViewModel))] 
public class LogOnViewModel : Screen, ILogOnViewModel, 
    IPartImportsSatisfiedNotification 
{ 
    [Import] 
    internal IDbManager DbManager { get; set; } 

    //this property is bind on listbox or comboBox 
    public BindableCollection<Spirit_Users> SpiritUsers 
    { 
     get { return _spiritUsers; } 
     set 
     { 
      _spiritUsers = value; 
      NotifyOfPropertyChange(() => SpiritUsers); 
     } 
    } 


    private void ConfigureSpiritUsers() 
    { 
     //load items from comboBox or listBox 
     var users = SettingsDbManager.LoadSpiritUsers(); 

     //add to the collection which is binded on control in view 
     if (users.Count > 0) 
     { 
      foreach (var user in users) 
      { 
       SpiritUsers.Add(user); 
      } 
     } 
    } 


    protected override void OnActivate() 
    { 
     ConfigureSpiritUsers(); 
     base.OnActivate(); 
    } 
} 

私の解決策は正しいとMVVVMとscenarion WPFアプリの中で最も適しているかどうかはわかりません。

また、ビューモデルクラスからDBへのCRUD操作を作成する必要があります。たとえば、オブジェクト/データをデータベースに保存します。

ありがとうございました。

答えて

1

ConfigureSpiritUsersの場合はSettingsDbManagerと表示されていますが、これはどこに定義されていますか?代わりにDbManagerにする必要がありますか?

実際には、DbManagerSpiritUserRepositoryであり、インターフェースや具体的な実装方法として、他のCRUD操作を含めることができます。あなたのビューモデルが抽象化に対して常に作用している限り、それは問題ありません。

また、コレクションには、1行にthis.SpiritUsers = new BindableCollection(users)という値を設定できます。また、SpiritUsersのタイプをIObservableCollection<Spirit_User>にするか、よりよくはSpirit_User(つまりISpiritUser)という抽象化を作成します。

+0

設定DbManagerは間違ってDbManagerですので、修正します。はいビューモデルクラスは常に同じDBスキームで動作します。さて、私はアドバイスを実装します、ありがとう。 –

関連する問題