Если вы можете что-то редактировать, то для неизменяемого значения должен быть изменяемый контейнер. Следовательно, ваша view-модель должна действовать непосредственно на изменяемый контейнер, а не на неизменяемое значение.
Целое число является примером такого неизменяемого объекта-значения: тип Int32
не имеет членов, позволяющих изменить состояние объекта. Вы можете только заменить целое число, но не изменить его. Таким образом, модель представления для целого числа будет выглядеть так:
public MutableIntegerViewModel
{
private readonly mutableInteger;
public MutableIntegerViewModel(MutableInteger mutableInteger)
{
this.mutableInteger = mutableInteger;
}
public string DisplayText
{
get
{
return this.mutableInteger.Value.ToString(
CultureInfo.CurrentCulture);
}
set
{
this.mutableInteger.Value =
Int32.Parse(value, CultureInfo.CurrentCulture);
}
}
}
Где MutableInteger
это просто:
public class MutableInteger
{
public int Value { get; set; }
}
Я пропустил обработку ошибок и уведомление об изменении здесь, но, надеюсь, вы поняли идею.
Также обратите внимание, что этот пример на самом деле не отличается от типичного примера класса Customer
с FirstName
и LastName
. Строки также являются неизменяемыми, поэтому у нас снова есть изменяемый контейнер для неизменяемых значений.