前回の回答は言葉足らずで、私の指摘を誤解されている方が多かったようです。
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 プロパティは変更されています (または必要に応じて変更されています)。