我已經創建了一個測試項目和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