我有一个应用程序,您可以在ListBox中的不同对象之间进行选择。选择对象时,它会更改控件的viewmodel。该控件从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");
}
}
答案 0 :(得分:1)
你可以试试这个:
public MyObjectViewModel MyObject {
get { return myObject; }
set
{
myObject=null;
OnPropertyChanged("MyObject");
myObject= value;
OnPropertyChanged("MyObject");
}
}
答案 1 :(得分:0)
您可以处理这样一个事实,即在最大数据时间之前可以更新最小日期时间并使某些内容无效(即延迟设置最大值或最小值,直到更新最大值和最小值)。这可能非常容易出错。或者,您可以将max和min设置为相同的值,以便它们只能同时更新。例如而不是让RecordingEnd
和RecordingStart
RecordingSpan
同时包含最大值和最小值。