2014-03-13 68 views
0

我已经在此上花了数小时,而类似的主题并没有帮助。 :(WPF:以编程方式将DataGrid绑定到集合

我有型“图表”,其中包含一个列表“了LineItem”的对象 我希望以编程方式绑定了LineItem到DataGrid中的用户控件

用户控件XAML:。

<DataGrid Name="myData" AutoGenerateColumns="True"> 

用户控件代码背后:

public void SetItemSource(ChartingBase.Chart chart) 
    { 
     //DataGrid.ItemsSource = chart.LineItems; // working! 

     // this is not working: 
     this.DataContext = chart; 
     Binding b = new Binding("LineItems"); 
     b.Mode = BindingMode.TwoWay; 
     b.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; 
     myData.SetBinding(DataGrid.ItemsSourceProperty, b); 
    } 

设置只是工作的ItemsSource手动创建绑定不工作,我不知道是什么即我可以试试。谢谢!

回答

0

在WPF中,习惯上将数据放入一个ObservableCollection<T>集合,并将数据绑定到DataGrid.ItemsSource属性。然后,您可以在代码中填充或操作集合,UI将自动更新。试试这个:

<DataGrid Name="myData" ItemsSource="{Binding Items}" AutoGenerateColumns="True"> 

...

public void SetItemSource(ChartingBase.Chart chart) 
{ 
    this.DataContext = chart; 
    Items = new ObservableCollection<YourDataType>(); 
    foreach (SomeDataType dataType in chart.SomeCollection) 
    { 
     Items.Add(new YourDataType(dataType.SomeProperty, ...)); 
    } 
} 
+0

感谢。ObservableCollection - 好吧。 但是:如果Items是我的UserControl中的一个集合,我必须将DataContext设置为'Self',对吧? 而我不能使用我的对象的副本。 – flowschi

+0

我不确定这是什么意思,我不知道你的数据来自哪里......这仅仅是一个例子。无论如何填写你的收藏。 – Sheridan

0

尝试

BindingOperations.SetBinding(myData, DataGrid.ItemsSourceProperty, new Binding("LineItems") { Source = chart }); 
相关问题