我有一个应用程序,您可以在其中选择 ListBox 中的不同对象。当您选择一个对象时,它会更改控件的视图模型。该控件使用 CodePlex 中的时间线控件,因此,我将时间线数据的 StartDate 和 EndDate 绑定到 ViewModel。更换 ViewModel 时,有时会出现错误:
ArgumentOutOfRangeException: MaxDateTime cannot be less then MinDateTime
这只发生在我从较晚的日期到较早的日期时。我很确定这是由于属性自动更新到视图的方式。这是相关的 XAML。
MaxDateTime="{Binding Path=RecordingEnd}"
MinDateTime="{Binding Path=RecordingStart}"
CurrentDateTime="{Binding Path=CurrentDateTime, Mode=TwoWay}"
ViewModel 有这个:
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");
}
}
有没有办法解决这个问题?有没有办法告诉 WPF 对象中的参数应该更新的顺序?
更新:我最终使用了@colinsmith 回复的变体:
public MyObjectViewModel MyObject {
get { return myObject; }
set
{
myObject= new MyObjectViewModel();
OnPropertyChanged("MyObject");
myObject= value;
OnPropertyChanged("MyObject");
}
}