私はテストプロジェクトを作成しました。
<Grid Margin="0,0,0,56" Loaded="Grid_Loaded_1">
<DataGrid Name="MyGrid" ItemsSource="{Binding Items}" HorizontalAlignment="Left" Margin="69,33,0,0" VerticalAlignment="Top" Height="220" Width="389"/>
<Button Content="Button" HorizontalAlignment="Left" Height="22" Margin="339,286,0,-45" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
</Grid>
CS:
public partial class MainWindow : Window
{
public ViewModel Vm { get; set; }
public MainWindow()
{
InitializeComponent();
}
private void Grid_Loaded_1(object sender, RoutedEventArgs e)
{
Vm = new ViewModel();
Vm.Items = new ObservableCollection<ExpandoObject>();
DataContext = Vm;
var fieldName = "FirstName";
var item = new ExpandoObject() as IDictionary<string, Object>;
item.Add(fieldName, "Adam"); // Dynamically adding new fields
var eoItem = item as ExpandoObject;
Vm.Items.Add(eoItem);
// Dynamically adding new columns
var col = new DataGridTextColumn();
col.Width = new DataGridLength(1, DataGridLengthUnitType.Auto);
col.Header = fieldName;
col.Binding = new Binding(fieldName) { Mode = BindingMode.TwoWay };
MyGrid.Columns.Add(col);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
}
}
public class ViewModel
{
public ObservableCollection<ExpandoObject> Items { get; set; }
}
は、あなたのDataGridのコレクションにバインドされ、私は動的な列「姓」を表示し、また編集グリッド行
XAMLによって、新しい行を追加することができましたか?新しいアイテムがそこに表示されます。 Columnsコレクションには文字列インデクサも必要です。たとえば、 'dataGrid.Columns [" column name "]' – opewix
@opewixはい、通常、各列はSourceコレクションのプロパティフォームにバインドされます。ここでは、すべての列が単一のプロパティにバインドされています。行内の各セルは辞書からの値であり、キーは列名です。編集を終了するときに値は常に空です。 – IBRA
しばらく前に、私はSilverlightで動的な列を操作しなければなりませんでした。私は 'List'を動的バインディングに使用しました。 –
opewix