6

我有一个应用程序,您可以在其中选择 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");    
    } 
}
4

2 回答 2

1

你能试试这个:

public MyObjectViewModel MyObject            {
            get { return myObject; }
            set
            {
                myObject=null;
                OnPropertyChanged("MyObject");

                myObject= value;
                OnPropertyChanged("MyObject");
            }
        }
于 2012-08-15T15:40:41.190 回答
0

您可以处理这样一个事实,即可以在最大数据时间之前更新最小日期时间并使某些内容无效(即推迟设置最大值或最小值,直到最大值和最小值都被更新)。这可能非常容易出错。或者,您可以将最大值和最小值设为相同的值,以便它们只能同时更新。例如,而不是拥有RecordingEndRecordingStart拥有RecordingSpan它同时具有最大值和最小值。

于 2012-08-15T15:27:38.817 回答