在单个属性的集合上更新多个属性
本文关键字:属性 更新 集合 单个 | 更新日期: 2023-09-27 18:13:19
在通知视图有关更改之前,我无法弄清楚如何更新多个属性。我得到了一个ViewModel的开始作为日期时间,开始时间作为时间跨度,结束作为日期时间和结束时间作为时间跨度。当我设置StartTime时,我想要相应地更新End和EndTime。所以如果我将StartTime设置为晚于EndTime的东西,我希望将EndTime更新为StartTime + 30分钟。我曾经使用WPF,在那里我能够更新ViewModel中的所有私有属性,然后调用PropertyChange事件,但是有了这个Prism,我不明白如何做到这一点。似乎我只能通过使用SetProperty方法来调用PropertyChanged事件。我做了一个我认为我需要做的小例子。
DateTime? _start = DateTime.Now;
TimeSpan? _startTime = DateTime.Now.TimeOfDay;
DateTime? _end = DateTime.Now;
TimeSpan? _endTime = DateTime.Now.TimeOfDay;
public TimeSpan? StartTime
{
var val = value;
_end = new TimeSpan(val.Hours, val.Minutes + 30, 0);
SetPropertyChanged(ref _startTime, val);
}
你可以这样做:
private int _myFieldA;
private int _myFieldB;
public int MyPropertyA
{
get { return _myFieldA; }
set
{
_myFieldA = value;
_myFieldB = value + 10;
OnPropertyChanged( () => MyPropertyA );
OnPropertyChanged( () => MyPropertyB );
}
}
public int MyPropertyB
{
get { return _myFieldB; }
set
{
_myFieldA = value - 10;
_myFieldB = value;
OnPropertyChanged( () => MyPropertyA );
OnPropertyChanged( () => MyPropertyB );
}
}
这些PropertyChanged
事件总是一个接一个地触发,但是当一个事件被触发时,数据总是一致的。
最好将EndTime表示为StartTime + duration,并且在StartTime setter中只需为两个属性调用PropertyChanged。此外,你不应该直接设置虚拟机属性中使用的私有字段。
如果你只是设置了EndTime的属性而不是后台字段,它会为你调用INPC(假设你有一个正确定义的EndTime属性)
public TimeSpan? StartTime
{
SetProperty(ref _startTime, val);
EndTime = StartTime + duration;
}