c# - 更新单个属性集的多个属性

标签 c# mvvm xamarin.forms prism

在将更改通知 View 之前,我不知道如何更新多个属性。 我得到了一个 ViewModel,其 Start 为 DateTime,StartTime 为 TimeSpan,End 为 DateTime,EndTime 为 TimeSpan。 当我设置 StartTime 时,我想相应地更新 End 和 EndTime。 因此,如果我将 StartTime 设置为晚于 EndTime 的时间,我希望将 EndTime 更新为 StartTime + 30 分钟。我曾经使用 WPF,在那里我能够更新 ViewModel 中的所有私有(private)属性,然后调用 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 事件总是一个接一个地触发,但是当一个事件被触发时,数据总是一致的。

关于c# - 更新单个属性集的多个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40086074/

相关文章:

c# - SQL 删除查询无法正常工作

c# - EFCore 5.0 : Change tracker when DbContext is disposed (DbContext lifetime)

silverlight - 在 PagedCollectionView 中隐藏和重新排序列

xamarin.forms - 将三星 watch 主动可穿戴应用程序中的 LE 蓝牙连接到树莓派,并向其发送 gattservice

ios - ITMS-90809:不推荐使用的API使用情况(UIWebView)

c# - 如何在 C# 中读取二进制文件直到 EOF

c# - WinRT 中是否存在拖放取消事件?

c# - 在 Xamarin.Forms 中,如果您无法从 XAML 实例化 BindingContext,如何允许自动完成 XAML 代码中的绑定(bind)?

c# - DocumentDB transient 故障处理最佳实践

ios - Reactivecocoa 传递新值(value)