2012-01-09 19 views
0

私は、自分のウィンドウにDataGridと2つのリストボックスを持っています。私はSQL Serverに接続するためにEntity Frameworkを使用しています。 ListBoxesパラメータで選択した項目に応じて、ストアドプロシージャに渡され、DataGridのデータが取得されます。私はMVVMを使用せずにこの機能を実装することができました。 MVVMを使用してこれを実装する方法を知りたいと思います。私を助けてください。前もって感謝します。バインディングを使用してUIを更新する方法

答えて

4

まず、MVVMはコードの問題を適切な領域に分割することについてです。たとえば、EF経由でデータベースと対話するには、モデルで行う必要があります。 ViewModelは、データを保持し、それを表示または表示に適した形にするための整形またはマッサージを行います(つまり列挙型をカラーなどに変換する)。

MVVMの方法で、あなたの機能を実装するには、バインディングを使用する必要があり、あなたのビューにあなたのviewmodelをバインドします:

public class MyControl 
{ 
    public MyControl() 
    { 
     this.DataContext = new MyViewModel(); 
    } 
} 

:ビューの背後にあるコードで

<MyControl> 
    <LayoutRoot> 
     <ListBox ItemsSource={Binding MyItems} SelectedItem={Binding MySelection} /> 
    </LayoutRoot> 
</MyControl> 

あなたのViewModelは次のようになります:

public class MyViewModel : INotifyPropertyChanged 
{ 
    public ObservableCollection<MyDataObject> MyItems 
    { 
     get { return _myItems; } 
     set 
     { 
      _myItems = value; 
      OnPropertyChanged("MyItems"); 
     } 
    } 

    public MyDataObject MySelection { get; set; } 

    public void DoSomethingWithDatabase() 
    { 
     Model.DoSomething(MySelection); 
    } 
} 

これはちょうど非常に単純なexaですあなたがMVVMのやり方をしている場合(そして私は意図的にたくさんのものを逃してしまった)、何が必要なのかを説明しています。適切な例と文書を作成するためには、本の中で少なくとも1章を取る必要があることを知っておく必要がありますので、さらに読むためにMSDNの記事を参照してください:Implementing the Model-View-ViewModel Pattern



とモデルはちょうどあなたがまた、SOAを実装する場合、モデルはちょうどそのデータベースに話しサービスを呼び出すことができます足がかりかもしれません。
これはビューでConvertersでも行うことができますが、コンバータでは必ずしも可能であるとは限りません。

+0

ビューモデルでコンバージョンを実行することは、実際には正しく実行するのが難しいです。試行したほとんどの人は、モデルとビューモデルの間でプロパティ変更通知を取得し、メモリがリークしてしまいます。 –

+0

私はあなたがモデルとVMの責任のいくつかを融合させていると思います。そして、伝統的に、状態を視覚的表現( 'enumを色に変換する ')に変換するなどのタスクは、VMの仕事ではなくView(カスタムコンバータ、DataTemplateセレクタなど)の仕事です。 – Will

+0

@ウィル、したがって脚注#2 - 色の列挙は、使用すると分かりやすい例でした。私は、コンバーター(ビジネスルール、サービスへのアクセス)ではなくVMのものを評価する方が適切だったケースをたくさん見てきましたが、私の事例では単純で何も考えられませんでした。 – slugster

関連する問題