在我通知视图有关更改之前,我无法弄清楚如何更新多个属性。 我得到了一个ViewModel,其中Start为DateTime,StartTime为TimeSpan,End为DateTime,EndTime为TimeSpan。 当我设置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);
}
答案 0 :(得分:2)
您可以这样做:
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
事件总是一个接一个地触发,但是当一个事件被触发时,数据总是一致的。
答案 1 :(得分:0)
最好将EndTime表示为StartTime + duration,并在StartTime setter中为两个属性调用PropertyChanged。 此外,您不应该直接设置VM属性中使用的私有字段。
答案 2 :(得分:0)
如果您只设置EndTime的属性而不是支持字段,它将为您调用INPC(假设您有正确定义的EndTime属性)。
public TimeSpan? StartTime
{
SetProperty(ref _startTime, val);
EndTime = StartTime + duration;
}