Похоже, мой предыдущий ответ был сформулирован не очень хорошо, так как многие люди не поняли суть моего высказывания, поэтому я попробую еще раз, принимая во внимание комментарии людей.
Тот факт, что объект String является неизменным, не означает, что переменная типа String не может быть изменена. Если у объекта есть свойство типа String, то присвоение этому свойству нового объекта String приводит к изменению свойства (в моем первоначальном ответе я упоминал об этом как о мутирующей переменной, по-видимому, некоторые люди не согласны с использованием этого термина " мутировать "в этом контексте).
Система привязки данных WPF может связываться с этим свойством. Если получено уведомление о том, что свойство изменяется с помощью INotifyPropertyChanged, то оно обновит целевой объект привязки, что позволит многим текстовым полям привязываться к одному и тому же свойству и все изменятся при обновлении свойства, не требуя никакого дополнительного кода.
Следовательно, нет необходимости использовать StringBuilder в качестве резервного хранилища для свойства. Вместо этого вы можете использовать стандартное свойство String и реализовать INotifyPropertyChanged.
public class MyClass : INotifyPropertyChanged
{
private string myString;
public string MyString
{
get
{ return myString; }
set
{
myString = value;
OnPropertyChanged("MyString");
}
}
protected void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
{ handler(this, new PropertyChangedEventArgs(propertyName)); }
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}
WPF может связываться с этим и автоматически подхватывает и вносит изменения в значение свойства . Нет, объект String не мутировал, но свойство String имеет мутированное (или измененное, если вы предпочитаете).