2012-09-04 57 views
1

我有一個簡單的DataGrid,我綁定到一個ObservableCollection並且它在Grid中沒有數據可見的情況下生成黑色小行。我正在使用ObservableCollection,因爲我使用Reflection在RunTime中構建了集合。DataGrid綁定到ObservableCollection時顯示空行<Object>

我做這樣的事情 XAML

<DataGrid ItemsSource="{Binding Data}" /> 

C#

public ObservableCollection<object> Data 
{ 
     get { return _Data; } 
     set { 
      this._deals = value; 
      this.NotifyPropertyChanged("Deals"); 
      } 
} 
public Run() 
{ 
     this.Data = CreateData(typeof(MyRecordClass)) //'MyRecordClass' needs to be passed at runtime 
    } 


public ObservableCollection<Object> CreateData(Type RecordType) 
{ 
    ObservableCollection<Object> data = new ObservableCollection<object>(); 
    var record = Activator.CreateInstance(RecordType); 
    // Logic to load the record with Data 
    data.Add(record); 
    return data; 
} 

有沒有一種方式,我可以在DataGrid讀一個ObservableCollection沒有指定COLUMNNAMES或創建的ObservableCollection對象在CreateData函數中?

回答

1

您的收藏應該有公共屬性,因此datagrid可以將列綁定到它。 如果您使用Object的集合類型,而不具備綁定的特性,則會顯示空行。

這裏是例子給你:

公共部分類主窗口:窗口 { 公衆的ObservableCollection數據源;

public MainWindow() 
    { 
     InitializeComponent(); 

     this.dataSource = new ObservableCollection<SomeDataSource>(); 

     this.dataSource.Add(new SomeDataSource { Field = "123" }); 
     this.dataSource.Add(new SomeDataSource { Field = "1234" }); 
     this.dataSource.Add(new SomeDataSource { Field = "12345" }); 

     this.dataGrid1.ItemsSource = this.dataSource; 
    } 
} 

public class SomeDataSource 
{ 
    public string Field {get;set;} 
} 



<DataGrid AutoGenerateColumns="False" Height="253" HorizontalAlignment="Left" Margin="27,24,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="448"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="First" Binding="{Binding Path=Field, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 
      </DataGrid.Columns> 
</DataGrid> 
+0

有沒有簡單的是投的ObservableCollection 到的ObservableCollection ? – user1647334

+0

使其類型或記錄(如ObservableCollection ),或使通用方法。或者,如果您真的想要投射它,請使用linq通用投射方法。 (collection.Cast ()) –

+0

謝謝你們。我用下面的和它的工作 私人的ObservableCollection ConvertObservationClass(IEnumerable的的ObservableCollection) {VAR 數據=新的ObservableCollection (); foreach(var item in observableCollection) { data.Add((RecordType)item); } 返回數據; } – user1647334

相關問題