2016-10-17 3 views
1

Ich kann nicht herausfinden, wie mehrere Eigenschaften aktualisiert werden, bevor ich die Ansicht über die Änderungen benachrichtigen. Ich habe ein ViewModel mit einem Start als DateTime, StartTime als TimeSpan, End als DateTime und EndTime als TimeSpan. Wenn ich die StartTime setze, möchte ich End und EndTime entsprechend aktualisieren. Also, wenn ich die StartTime auf etwas später als EndTime festlegen, möchte ich EndTime zu StartTime + 30 Minuten zu aktualisieren. Ich habe mit WPF gearbeitet, wo ich alle privaten Eigenschaften im ViewModel aktualisieren konnte, und dann das PropertyChange-Ereignis aufgerufen habe, aber mit diesem Prism verstehe ich nicht, wie das geht. Es scheint, dass ich das PropertyChanged-Ereignis nur mithilfe der SetProperty-Methode aufrufen kann. Ich habe ein kleines Beispiel dafür, was habe ich dachte, ich brauchte nicht zu ..Aktualisieren mehrerer Eigenschaften auf der Ebene einer einzelnen Eigenschaft

DateTime? _start = DateTime.Now; 
TimeSpan? _startTime = DateTime.Now.TimeOfDay; 
DateTime? _end = DateTime.Now; 
TimeSpan? _endTime = DateTime.Now.TimeOfDay; 
public TimeSpan? StartTime 
{ 
    var val = value; 
    _end = new TimeSpan(val.Hours, val.Minutes + 30, 0); 
    SetPropertyChanged(ref _startTime, val); 
} 

Antwort

2

Sie können etwas tun:

private int _myFieldA; 
private int _myFieldB; 

public int MyPropertyA 
{ 
    get { return _myFieldA; } 
    set 
    { 
     _myFieldA = value; 
     _myFieldB = value + 10; 
     OnPropertyChanged(() => MyPropertyA); 
     OnPropertyChanged(() => MyPropertyB); 
    } 
} 

public int MyPropertyB 
{ 
    get { return _myFieldB; } 
    set 
    { 
     _myFieldA = value - 10; 
     _myFieldB = value; 
     OnPropertyChanged(() => MyPropertyA); 
     OnPropertyChanged(() => MyPropertyB); 
    } 
} 

Diese PropertyChanged Ereignisse nach dem anderen immer ein Feuer, obwohl, aber die Daten immer konsistent, wenn man gefeuert wird.

+0

Es ist lustig, weil ich so etwas probiert habe, und wenn ich es getestet habe, würde es nicht funktionieren. Aber jetzt, als ich angefangen habe, funktioniert es, ich muss beim ersten Mal etwas falsch gemacht haben. Danke! –

0

besser auszudrücken EndTime als Startzeit + Dauer und in der Starttime Setter nur Property für beiden Eigenschaften nennen. Außerdem sollten Sie private Felder, die in VM-Eigenschaften verwendet werden, nicht direkt festlegen.

+1

Warum sollte ich private Eigenschaften nicht direkt im ViewModel festlegen? –

+1

Keine Eigenschaften, nur Felder, die die Eigenschaften unterstützen, so dass Sie nicht vergessen, PropertyChanged oder irgendetwas, das Sie in den Setter haben, aufzurufen. –

0

Wenn Sie nur die Eigenschaft EndTime anstelle des Hintergrundfelds festlegen, ruft es INPC für Sie auf (vorausgesetzt, Sie haben eine ordnungsgemäß definierte EndTime-Eigenschaft).

public TimeSpan? StartTime 
{ 
    SetProperty(ref _startTime, val); 
    EndTime = StartTime + duration; 
} 
Verwandte Themen