Ich habe eine Anwendung, wo Sie zwischen verschiedenen Objekten in einer ListBox auswählen können. Wenn Sie ein Objekt auswählen, wird das Ansichtsmodell für ein Steuerelement geändert. Das Steuerelement verwendet das Timeline-Steuerelement von CodePlex und aus diesem Grund habe ich das StartDate und das EndDate für die Timeline-Daten, die an ViewModel gebunden sind. Wenn das Ansichtsmodell verändert aus, bekomme ich manchmal einen Fehler:OnPropertyChange Firing Order
ArgumentOutOfRangeException: MaxDateTime cannot be less then MinDateTime
Dies tritt nur auf, wenn ich von einem späteren Zeitpunkt zu einem frühen Zeitpunkt zu gehen. Ich bin mir ziemlich sicher, dass dies auf die Art und Weise zurückzuführen ist, wie die Eigenschaften automatisch auf die Ansicht aktualisiert werden. Dies ist das relevante XAML. diese
MaxDateTime="{Binding Path=RecordingEnd}"
MinDateTime="{Binding Path=RecordingStart}"
CurrentDateTime="{Binding Path=CurrentDateTime, Mode=TwoWay}"
Das Ansichtsmodell hat:
private int myObjectIndex;
public int MyObjectIndex
{
get { return myObjectIndex; }
set { myObjectIndex = value; OnPropertyChanged("MyObjectIndex"); MyObject = MyObjects[myObjectIndex]; }
}
private MyObjectViewModel myObject=new MyObjectViewModel();
public MyObjectViewModel MyObject {
get { return myObject; }
set
{
myObject= value;
OnPropertyChanged("MyObject");
}
}
Gibt es einen Weg, um dieses Problem? Gibt es eine Möglichkeit, WPF mitzuteilen, in welcher Reihenfolge die Parameter in einem Objekt aktualisiert werden sollen?
Update: Ich landete mit einer Variation von @ colinsmith Antwort:
public MyObjectViewModel MyObject {
get { return myObject; }
set
{
myObject= new MyObjectViewModel();
OnPropertyChanged("MyObject");
myObject= value;
OnPropertyChanged("MyObject");
}
}
Ich gehe davon aus den drei Definitionen sind nicht in dieser Reihenfolge? Und kannst du klarstellen, "wenn das ViewModel ausgetauscht wird", was du mit "verändert" meinst? –
Wenn Sie ein Element auf der Benutzeroberfläche auswählen, wird das Objekt aktualisiert und aktualisiert. – Paparazzi
Nur aus Neugier, können Sie versuchen, ändern Sie die Reihenfolge, die Sie die Eigenschaften CurrentDateTime = MinDateTime = MaxDateTime = ... die Reihenfolge wahrscheinlich wichtig ... d. Ihre Datumsbereiche unterscheiden sich in verschiedenen Modellen. Wenn die Modelldaten in die Eigenschaften ... eingegeben werden, müssen sie gültig sein, während sie die Eigenschaften aktualisieren, z. CurrentDateTime muss im Min/Max-Bereich sein .... und Max muss größer sein als mindatetime –