[WPF] ItemsSource に List<String> を指定しても編集できませんので

List<String>の中身を軽く編集しようと思って、DataGridやListBoxのItemsSourceに指定したら動かないっ・・・

こんなListを

public List<String> Items {
	get { return _Items; }
	set { _Items = value; }
}
private List<string> _Items = new List<String> { "One", "Two", "Three" };

簡単編集だ!

<!-- 編集するとエラー (両方向のバインドには、Path または XPath が必要です。) -->
<DataGrid ItemsSource="{Binding Items}">
	<DataGrid.Columns>
		<DataGridTextColumn Binding="{Binding .}" />
	</DataGrid.Columns>
</DataGrid>

<!-- 編集しても反映されない -->
<ListBox ItemsSource="{Binding Items}">
	<ListBox.ItemTemplate>
		<DataTemplate>
			<TextBox Text="{Binding .}" />
		</DataTemplate>
	</ListBox.ItemTemplate>
</ListBox>

動かない!
Path にドット.つけてるのに😭

はい、ドット.とか無意味なんですね。
バインドしている対象が値型(文字、数値など)では参照を変更できないので編集はできません!
諦めましょう。

何かしらのクラスに内包してやるしか無いみたいです。
こんな感じにして

public static List<String> Items = new List<String> { "One", "Two", "Three" };

public List<BindingProxy<string>> ItemsProxy {
	set { _ItemsProxy = value; }
	get { return _ItemsProxy; }
}
private List<BindingProxy<string>> _ItemsProxy = new List<BindingProxy<string>>( Items.Select( x => new BindingProxy<string>( x ) ) );

public class BindingProxy<T> {
	public BindingProxy() {}
	public BindingProxy( T value ) {
		this.Value = value;
	}
	public T Value { get; set; }
}

今度こそ簡単編集だ!

<DataGrid ItemsSource="{Binding ItemsProxy}">
	<DataGrid.Columns>
		<DataGridTextColumn Binding="{Binding Value}" />
	</DataGrid.Columns>
</DataGrid>


<ListBox ItemsSource="{Binding ItemsProxy}">
	<ListBox.ItemTemplate>
		<DataTemplate>
			<TextBox Text="{Binding Value}" />
		</DataTemplate>
	</ListBox.ItemTemplate>
</ListBox>

あとでItemsProxyをItemsに戻してデータ編集完了です。

参考:
WPF: Bind DataGrid to List<String> - Stack Overflow