我已经创建了一个测试项目和ExpandoObject为我工作。我能够显示动态栏“姓”,并通过编辑网格行
XAML添加新行:
<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中绑定到一个集合?新项目应该出现在那里。 Columns集合中也应该有一个字符串索引器。例如'dataGrid.Columns [“列名称”]' – opewix
@opewix是的,通常每列都绑定到源集合的属性,在我的情况下,所有列都绑定到一个属性。这是字典,行内的每个单元格都是来自字典的值,其中键是列名。并且在结束编辑时值总是空的。 – IBRA
前段时间我不得不在Silverlight中使用动态列。我使用'List'来进行动态绑定。考虑使用它,如果没有答案 –
opewix