2015-02-24 56 views
0

我試圖創建一個使用MVVM模式WPF窗口。 現在我有一個問題,找出如何更新值,在視圖改變,到數據庫,而不使用「保存」按鈕,之後直值被改變,而ViewModel被通報。更新值到數據庫,而「保存」按鈕

控制在查看

<ItemsControl> 
    <Label Content="Order Date"/> 
    <DatePicker SelectedDate="{Binding CreatedAt, Mode=TwoWay}"/> 
</ItemsControl> 

視圖模型

Public Class ViewModelOrder 
    Implements INotifyPropertyChanged 

    Private _Order As ModelOrder 

    '... 
    Private _CreatedAt As DateTime 
    Public Property CreatedAt As DateTime 
    Get 
     Return _CreatedAt 
    End Get 
    Set(value As DateTime) 
     _CreatedAt = value 
     Me.RaisePropertyChanged(Function() Me.CreatedAt) 
    End Set 
    '... 
    Public Sub New(inOrder as ModelOrder) 
     _Order = inOrder 
     _CreatedAt = _Order.CreatedAt 
    End Sub 
    '... 
End Class 

綁定做工精細,性能CreatedAt更新後的值在視圖改變。

我不想使用事件處理程序中查看「代碼背後」,因爲,據我所知MVVM模式,視圖模型的實例並不需要了解查看。

+2

你爲什麼不只是在二傳手這樣做呢? – Steve 2015-02-24 14:28:45

+0

好的,但是如何從View中調用setter,因爲ViewModel在從數據庫獲取數據時可以使用相同的setter來設置值?從數據庫中讀取並創建對象 – Fabio 2015-02-24 14:33:42

+0

傳入構造函數的值。但是,當窗口打開一個CreatedAt屬性的setter被調用了三次。我檢查了CreatedAt proerty沒有在其他地方使用。 – Paparazzi 2015-02-24 14:38:05

回答

1

只要做什麼,如果該值沒有改變
我做C#所以VB可能不正確

Set(value As DateTime) 
    If _CreatedAt <> value Then 
     _CreatedAt = value 
     ' update database 
     Me.RaisePropertyChanged(Function() Me.CreatedAt) 
    End If 
End Set 
+0

法比奧您的編輯把它弄壞了「_CreatedAt =值然後「是」_CreatedAt =「oposite」然後「 – Paparazzi 2015-02-25 13:34:14

+0

謝謝,我想了一個小時我需要編輯它:) – Fabio 2015-02-25 13:35:47

相關問題