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" };
簡単編集だ!
<DataGrid ItemsSource="{Binding Items}">
<DataGridColumns>
<DataGridTextColumn Binding="{Binding .}" />
</DataGridColumns>
</DataGrid>
<ListBox ItemsSource="{Binding Items}">
<ListBoxItemTemplate>
<DataTemplate>
<TextBox Text="{Binding .}" />
</DataTemplate>
</ListBoxItemTemplate>
</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}">
<DataGridColumns>
<DataGridTextColumn Binding="{Binding Value}" />
</DataGridColumns>
</DataGrid>
<ListBox ItemsSource="{Binding ItemsProxy}">
<ListBoxItemTemplate>
<DataTemplate>
<TextBox Text="{Binding Value}" />
</DataTemplate>
</ListBoxItemTemplate>
</ListBox>
あとでItemsProxyをItemsに戻してデータ編集完了です。
参考:
WPF: Bind DataGrid to List<String> - Stack Overflow