私は、ListBox内のさまざまなオブジェクト間で選択できるアプリケーションを用意しています。オブジェクトを選択すると、コントロールのビューモデルが変更されます。コントロールはCodePlexのタイムラインコントロールを活用しています。そのため、私はViewModelにバインドされたタイムラインデータのStartDateとEndDateを持っています。 ViewModelが変更されると、時々エラーが発生します。OnPropertyChange発注の変更
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");
}
}
を私は3つの定義の順になっていないと仮定していますか?そして、「ViewModelが変更されたときに」「変更された」ということを明確にすることはできますか? –
UIからアイテムを選択すると、そのアイテムが原因で更新されますか? – Paparazzi
ちょうど好奇心から、プロパティを設定する順序を変更することはできますか?CurrentDateTime = MinDateTime = MaxDateTime = ...その順序はおそらく重要です。あなたの日付範囲は異なるモデルで異なります....モデルデータがプロパティに設定されているとき...プロパティを更新している間は有効である必要があります。 CurrentDateTimeはmin/maxの範囲にある必要があります....そしてmaxはmindatetimeより大きい必要があります –