2010-07-01 5 views
0

Je suis nouveau à MVVM.Liaison à une valeur mise à jour dans ViewModel dans MVVM?

J'ai une étiquette à mon avis qui ressemble à ceci:

<Label Content="{Binding Path=ClockTime}" /> 

Et mon ViewModel ressemble à:

Public Class MainWindowViewModel 
    Inherits ViewModelBase 

    Dim strClockTime As String 
    Dim dstDispatcherTimer As New Windows.Threading.DispatcherTimer 

    Public Sub New() 
    AddHandler dstDispatcherTimer.Tick, AddressOf TimeDelegate 
    dstDispatcherTimer.Interval = New TimeSpan(0, 0, 1) 
    dstDispatcherTimer.Start() 
    End Sub 

    Private Sub TimeDelegate(ByVal sender As Object, ByVal e As System.EventArgs) 
    strClockTime = DateTime.Now.ToString("dddd, dd MMMM yyyy h:mm:ss tt") 
    End Sub 

    Public ReadOnly Property ClockTime As String 
    Get 
     Return strClockTime 
    End Get 
    End Property 

End Class 

Mon problème est que l'étiquette ne met pas à jour dynamiquement avec le fil dans le ViewModel. Existe-t-il un moyen simple de faire savoir à la vue que cette valeur est dynamique?

Répondre

2

Pour développer ce que Todd a dit que vous devez mettre à jour votre code comme ceci vous avez besoin ViewModelBase de regarder quelque chose comme ça

Public class ViewModelBase Inherits INotifyPropertyChanged 
    protected Sub OnPropertyChanged(PropertyName as string) 
    if PropertyChanged is not nothing then 
     PropertyChanged(new PropertyChangedEventArgs(PropertyName) 
    end if 
    End Sub 
End Class 

puis modifier votre modèle de vue comme ceci:

Private Sub TimeDelegate(ByVal sender As Object, ByVal e As System.EventArgs) 
    ClockTime = DateTime.Now.ToString("dddd, dd MMMM yyyy h:mm:ss tt") 
    End Sub 

    Public Property ClockTime As String 
    Get 
     Return strClockTime 
    End Get 
    Private Set 
     strClockTime = value 
     OnPropertyChanged("ClockTime") 
    End Set 
    End Property 

Notic e que j'affecte à ClockTime et lorsque cela est défini, WPF est informé que ClockTime a changé

4

Vous devez implémenter l'interface INotifyPropertyChanged dans votre ViewModel, et augmenter l'événement PropertyChanged lorsque vous définissez clockTime

Questions connexes