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");
}
}