Wyświetlanie aktualnego czasu z ciągłym wyświetlaniem w WPF przy użyciu MVVM


Chcę wyświetlić bieżący czas na moim ekranie ciągłego odświeżania na ekranie WPF przy użyciu wzorca MVVM.
Piszę ten kod w moim modelu widoku
// creating a property
private string _currentDateTime;
public string CurrentDateTime
{
get
{
return _currentDateTime;
}
set
{
if (value != _currentDateTime)
{
_currentDateTime = value;
this.RaisePropertyChanged(() => this.CurrentDateTime);
}
}
}

i napisałem tę metodę
public string GetCurrentDateTime()
{
try
{
DispatcherTimer timer = new DispatcherTimer(new TimeSpan(0, 0, 1),
DispatcherPriority.Normal,
delegate
{
this.CurrentDateTime = DateTime.Now.ToString("HH:mm:ss");
},
this.Dispatcher); return CurrentDateTime;
}
catch
{
return CurrentDateTime;
}
}

Połączyłem mój blok tekstowy z właściwością, ale pokazuje wyjątek, ponieważ
this.CurrentDateTime
ma wartość
null
.
Jakieś sugestie, dlaczego?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Nie jestem pewien, jakie są Twoje intencje dotyczące
RaisePropertyChanged (() = & > this.CurrentDateTime)
.
Jeśli chodzi o dbanie o właściwość MVVM zmienionych powiadomień, to ten kod powinien znajdować się na Twojej maszynie wirtualnej
public event PropertyChangedEventHandler PropertyChanged;protected void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}

wtedy twój zestaw powinien być
set
{
if (value != _currentDateTime)
{
_currentDateTime = value;
OnPropertyChanged("CurrentDateTime");
}
}

aby Twój czas był aktualny
Timer
http://msdn.microsoft.com/en-u ... timer(v=vs.71).aspx
Następnie możesz ustawić interwał, powiedzmy 1 sekundę, i dla każdego minionego zdarzenia timera ustawić własne
CurrentDateTime
CurrentDateTime = DateTime.Now.ToString();
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Nie jestem pewien, dlaczego występuje ten problem, ale osiągnąłem tę samą funkcjonalność, ale z niewielką zmianą kodu.
Zmieniłem kod w bloku
GetCurrentDateTime
metody
try
try
{
DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Interval = new TimeSpan(0, 0, 1);
dispatcherTimer.Start(); return CurrentDateTime;
}

i dodałem nową metodę dla timera
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
// Updating the Label which displays the current second
this.CurrentDateTime = DateTime.Now.ToString(" HH:mm tt");// Forcing the CommandManager to raise the RequerySuggested event
CommandManager.InvalidateRequerySuggested();
}

Teraz działa

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się