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

最小日時が最大データ時刻の前に更新される可能性があるという事実を処理して、何かを無効にすることができます(つまり、最大と最小の両方が更新されるまで、最大または最小の設定を延期します)。これは非常にエラーが発生しやすい可能性があります。または、最大値と最小値を同じ値にして、同時にのみ更新できるようにすることもできます。RecordingEndたとえば、RecordingStart持っている代わりにRecordingSpan、最大値と最小値の両方が含まれています。

于 2012-08-15T15:27:38.817 に答える