2013-03-23 45 views
0

當我的視圖綁定到我的單例ViewModel中定義的命令時,是否有一些特殊規則需要注意,與正常(非單例)ViewModels相反?Singletons and ICommand

我所有的ViewModels除了有問題的行爲正常。他們中的每一個都公開了兩個名爲HasChanges(布爾屬性)和SaveChanges(方法)的公共成員,我正在調用我的命令的CanExecuteExecute函數。

而所有其他瀏覽仍能正常運行,啓用/禁用按鈕時的HasChanges的值更改和保存的內容點擊這些按鈕時,實現Singleton模式的唯一視圖模型只發生後的第一裝載調用CanExecute視圖。
之後,從該ViewModel中引發的任何數量的PropertyChanged事件(我所有的ViewModel都實現了INotifyPropertyChanged)不會影響該按鈕的禁用狀態。

想知道我在這裏失蹤。

這裏的單模型視圖:

Public NotInheritable Class MyViewModel 
    Private Shared ReadOnly mInstance As New CommonListsViewModel 

    Public Shared ReadOnly Property Instance() As CommonListsViewModel 
     Get 
      Return mInstance 
     End Get 
    End Property 

    Public Property SaveChangesCommand As ICommand 


    Private Sub New() 
     SaveChangesCommand = New Commands.SaveChangesCommand() 
    End Sub 

    Public ReadOnly Property HasChanges As Boolean Implements IEditorViewModel.HasChanges 
     Get 
      ... 
     End Get 
    End Property 

    Public Function SaveChanges() As Boolean Implements IEditorViewModel.SaveChanges 
     ... 
    End Function 
End Class 

這裏的命令:

Friend Class SaveChangesCommand 
    Inherits CommandBase 

    Public Overrides Function CanExecute(parameter As Object) As Boolean 
     Return MyViewModel.Instance.HasChanges 
    End Function 

    Public Overrides Sub Execute(parameter As Object) 
     MyViewModel.Instance.SaveChanges() 
    End Sub 
End Class 

這是我的觀點:

<Grid DataContext="{x:Static local:CommonListsViewModel.Instance}"> 
    <Button Command="{Binding SaveChangesCommand}"> 
</Grid> 

回答

0

應該不會出現在適當的行爲有什麼區別到一個類遵循單例模式的事實。任何引用單例的東西都不會關心類的構造是如何受限制的,只是該類的實例存在。

問題可能在於缺少ViewModel的PropertyChanged事件與Command上的CanExecuteChanged之間的適當鏈接。

+0

:正確診斷。謝謝一堆。 – dotNET 2013-03-24 01:21:29