Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何同步视图模型上的属性,但在用户第二次更改后停止同步?_Wpf_Silverlight_Synchronization_Viewmodel_Inotifypropertychanged - Fatal编程技术网

Wpf 如何同步视图模型上的属性,但在用户第二次更改后停止同步?

Wpf 如何同步视图模型上的属性,但在用户第二次更改后停止同步?,wpf,silverlight,synchronization,viewmodel,inotifypropertychanged,Wpf,Silverlight,Synchronization,Viewmodel,Inotifypropertychanged,要求1 假设我有一些视图模型,它有两个DateTime属性,Start和End。我希望将End设置为与Start的某个偏移量,并在Start更改时保持该偏移量。通过监听Start的属性通知,然后设置End,这非常简单 要求2 现在,让我们添加一个有趣的部分:如果用户显式更改End,我希望能够停止调整End。换句话说,假设这是一个航空公司预订系统,我们希望根据平均停留时间将结束日期设置为3天后,但是如果用户明确地将结束日期设置为特定日期,那么当他/她再次设置开始日期时,结束日期保持不变 问题 乍一

要求1

假设我有一些视图模型,它有两个DateTime属性,Start和End。我希望将End设置为与Start的某个偏移量,并在Start更改时保持该偏移量。通过监听Start的属性通知,然后设置End,这非常简单

要求2 现在,让我们添加一个有趣的部分:如果用户显式更改End,我希望能够停止调整End。换句话说,假设这是一个航空公司预订系统,我们希望根据平均停留时间将结束日期设置为3天后,但是如果用户明确地将结束日期设置为特定日期,那么当他/她再次设置开始日期时,结束日期保持不变

问题 乍一看,您似乎可以只监听End的通知,并设置处理程序在处理Start时将看到的一些值,然后说ok,我不会调整End。问题是End不知道为什么要更改它,因此End更改的处理程序将立即愉快地设置停止更改条件。这违反了要求1

如何满足这两个要求?

假设我们有一个标志AutoAdjust,告诉您是否应该在开始更改时调整End。AutoAdjust最初是真的

无论何时设置“结束”,如果“开始”和“结束”之间的间隔不同于默认间隔,请将“自动调整”设置为false

无论何时设置“开始”,如果“自动调整”为真,则调整“结束”的值


请注意,使用此方案,一旦AutoAdjust变为false,就永远无法将其设置回true。这是有意为之,而且比允许自动调整倒转更直观-用户可以很容易地推断出结束日期已停止自动调整,因为他们手动修改了它,但如果他们将其设置回自动值,它将再次开始自动调整,这就不那么直观了。

好的解决方案,我同意你的最后一段。