Home > Mobile >  Update property values using the ViewModel
Update property values using the ViewModel

Time:11-09

The ViewModel below is used on multiple forms.

My goal is to update values received from those forms using the DateRangeViewModel itself. Is it possible?

Example: User submits "2022-01-01 12:00:00 AM" and I update it to "2022-01-02 12:00:00 AM" before passing it to the controller.

What I have tried:

public class DateRangeViewModel
{
    public DateTime? From { get; set; }
    public DateTime? To { 
        get 
        {
            if (!To.HasValue) { return null; }
            return To.Value.AddDays(1);
        }
        set {}
    }
}

And it throws an Exception of type 'System.StackOverflowException'.

I know I can update these values through the controller. However, it is not my intent.

CodePudding user response:

You're basically creating a recursive function here (hence the StackOverflowException). You don't need to reference "To" inside the getter, you need to reference "an internal value" (most likely private).

So this should work:

private DateTime? ToValue { get; set; }
public DateTime? To 
{
    get { return ToValue.HasValue ? ToValue.AddDays(1) : null; }
    set { ToValue = value; }
}

CodePudding user response:

Use a backing field:

public class DateRangeViewModel
{   
    public DateTime? From { get; set; }
    public DateTime? To { 
        get 
        {
            return _to;
        }
        set
        {
            if (value == null)
            {
                _to = null;
            }
            else
            {
                _to = value.Value.AddDays(1);
            }
        }
    }

    private DateTime? _to;
}

Probably it would be clearer, if you use an additional Property:

public class DateRangeViewModel
{   
    public DateTime? From { get; set; }
    public DateTime? To { get; set; }
    public DateTime? ToPlus1Day => To == null ? null : To.Value.AddDays(1)
}
  • Related