2012-01-09 63 views
0

我的窗口中有一個DataGrid和兩個ListBox。我正在使用實體框架連接到我的SQL Server。根據我在ListBoxes參數中所做的選擇將被傳遞給我的存儲過程,我的DataGrid的數據將被檢索。我能夠在不使用MVVM的情況下實現此功能。我想知道如何使用MVVM實現這一點。請幫助我。提前致謝。如何使用綁定更新UI

回答

4

首先,MVVM是關於將代碼的關注點分離到適當的區域。例如,通過EF與您的數據庫交談應在中完成。 ViewModel負責保存數據,並對其進行整形或按摩以使其更適合於顯示(即將枚舉轉換爲顏色等)。

要實現在MVVM方式的功能,您將需要使用綁定和您的視圖模型綁定到您的看法:

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); 
    } 
} 

這只是一個非常簡單的例子簡單地說明如果你使用MVVM的方式來做什麼(而且我故意錯過了一堆東西),那麼它就是必需的。要做一個恰當的例子並記錄下你需要知道的所有重要部分至少需要一本書的一章,所以我將把你的MSDN文章引薦給你進一步閱讀:Implementing the Model-View-ViewModel Pattern



和模型可能只是一個敲門磚,如果您還實現SOA,型號可能只是調用一個服務,然後會談到數據庫。
這也可以在視圖中使用Converters完成,但在轉換器中可能並不總是可行或實用。

+0

在視圖模型中做轉換確實很難做到正確。大多數嘗試最終連接屬性的人會在模型和視圖模型之間更改通知,從而導致內存泄漏。 – 2012-01-10 01:13:08

+0

我認爲你正在混合模型和虛擬機的一些職責。傳統上,諸如將狀態轉換爲可視表示(將枚舉轉換爲顏色)等任務不是VM的工作,而是視圖(自定義轉換器,DataTemplate選擇器等)的工作。 – Will 2012-01-10 15:34:36

+0

@因此,腳註#2 - 枚舉顏色只是一個易於理解的示例使用。我已經看到很多情況下,更適合在虛擬機中評估內容而不是轉換器(業務規則,服務訪問),但我無法想象一些簡單而且沒有人爲我的例子設計的東西。 – slugster 2012-01-10 17:02:44