Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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
C# 相互依存属性的模式_C#_Wpf - Fatal编程技术网

C# 相互依存属性的模式

C# 相互依存属性的模式,c#,wpf,C#,Wpf,我的ViewModel中有一个属性会影响另一个属性,例如SelectedDate和ReferenceDate 每当SelectedDate更改时,ReferenceDate会自动设置为低于SelectedDate的值,这当然需要在ui中更新这两个值。例如: public SelectedDate { set { _selectedDate = value; _referentialDate = value.AddDays(-1);

我的ViewModel中有一个属性会影响另一个属性,例如SelectedDate和ReferenceDate

每当SelectedDate更改时,ReferenceDate会自动设置为低于SelectedDate的值,这当然需要在ui中更新这两个值。例如:

public SelectedDate
{
    set
    {
        _selectedDate = value;
        _referentialDate = value.AddDays(-1);
        RaisePropertyChanged("SelectedDate");
        RaisePropertyChanged("ReferentialDate");
    }
}
这个更新是通过属性更改机制处理的,该机制还负责加载相关数据。同样的情况也只适用于参考日期:

public ReferentialDate
{
    set
    {
        _referentialDate = value;
        RaisePropertyChanged("ReferentialDate");
    }
}

不幸的是,这种实现导致在SelectedDate更改时调用ReferentialDate两次。是否有一些模式或解决方案可以防止多次调用ReferentialDate?

这应该可以解决问题:

public SelectedDate
{
    set
    {
      _selectedDate = value;
      ReferentialDate = value.AddDays(-1);
      RaisePropertyChanged("SelectedDate");          
    }
}

如果ReferentialDate总是在SelectedDate之前1天,那么您可以去掉_ReferentialDate,并生成一个ReferentialDate getter,从SelectedDate计算值。您还应该能够独立地选择ReferentialDate。因此,并非总是在SelectedDate前1天。SelectedDate和ReferentialDate之间的关系不清楚-请您解释一下好吗?例如,如果SelectedDate在过去或将来更改了3天,ReferentialDate是否应该更改3天以保持两个日期之间的差异?现在,您的代码没有这样做。如果SelectedDate更改了3天,则ReferentialDate更改了4天。如果ReferentialDate本身发生了更改,则不会触动SelectedDate。然后,我会根据两个属性将ReferentialDate设置为一个计算值,这两个属性是:SelectedDate和SelectedDate与ReferentialDate之间的间隔。修改所选日期时,无需修改其他属性。调用方修改参考日期时,将存储新的日期间隔,这将更改参考日期的计算。未存储引用日期-它是在ReferentialDate getter中计算的。