DataGrid
ユーザーがセルにデータを入力できるようにすることを主な目的とする があります。
ただし、このグリッドの最初のフィールドにはリストの内容が表示されます。
1 つの列だけにデータ ソースを設定するにはどうすればよいですか?
編集:私はこのような何かを達成したい:
私のコメントに加えて、1つの簡単な方法は、itemssourceコレクションをラップし、すべてのアイテムのリストを、期待するデータで追加することです。
良い点は、最初の列に別のソースを設定する必要はなく、新しいリストプロパティにバインドするだけです。
編集:
私はあなたの問題を抱えていると思います。
グリッドのitemssourceがあるとします。
List<MyObject> _list;
myobjectには、Asc / Desc、GroupBy、Having、Dispplayorderプロパティが含まれています。
したがって、MyObjectWrapperを作成し、Fieldプロパティを追加します
public class MyObjectWrapper
{
public MyObject WrappedOject {get;set;}
public string Fields {get;set}
}
あなたは新しいものになってしまいます
List<MyObjectWrapper> _wrapperlist;
これらのコレクションには、表示する必要のあるすべての情報が含まれています。
で独自のものを指定DataGridTemplateColumn
し、その列に配置しようとしているものにDataGrid.Columns
を設定します。DataGridTemplateColumn.CellTemplate
たとえば、ComboBox
他のフィールドのリストを指すようにしたい場合:
<DataGrid.Columns>
<DataGridTemplateColumn Header="Fields">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding ElementName=MyWindow, Path=DataContext.SomeCategoryList}"
SelectedItem="{Binding SomePropertyOnDataItemInRow}" />
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
SomeCategoryList
onというプロパティを使用しMyWindow.DataContext
ていますが、フィールド リストが保存されている場所を指すようにバインディングを設定できます。