C# 数据网格在绑定到ObservableCollection时显示空行<;对象>;
我有一个简单的DataGrid,我绑定到一个ObservableCollection,它在网格中生成黑色的小线条,没有可见的数据。我使用ObservableCollection,因为我在运行时使用反射构建了集合 我正在做这样的事情 XAMLC# 数据网格在绑定到ObservableCollection时显示空行<;对象>;,c#,datagrid,observablecollection,C#,Datagrid,Observablecollection,我有一个简单的DataGrid,我绑定到一个ObservableCollection,它在网格中生成黑色的小线条,没有可见的数据。我使用ObservableCollection,因为我在运行时使用反射构建了集合 我正在做这样的事情 XAML C# 公共可观测收集数据 { 获取{return_Data;} 集合{ 这个。_交易=价值; 本协议。NotifyPropertyChanged(“交易”); } } 公营 { 需要在运行时传递this.Data=CreateData(typeof(M
C#
公共可观测收集数据
{
获取{return_Data;}
集合{
这个。_交易=价值;
本协议。NotifyPropertyChanged(“交易”);
}
}
公营
{
需要在运行时传递this.Data=CreateData(typeof(MyRecordClass))//'MyRecordClass'
}
公共ObservableCollection CreateData(类型RecordType)
{
ObservableCollection数据=新的ObservableCollection();
var record=Activator.CreateInstance(RecordType);
//用数据加载记录的逻辑
数据。添加(记录);
返回数据;
}
有没有一种方法可以让DataGrid读取ObservableCollection而不指定列名,或者在CreateData函数中创建ObservableCollection对象?您的集合应该具有公共属性,以便DataGrid可以将列绑定到它。 如果使用对象的集合类型,则没有用于绑定的属性,因此将显示空行 下面是一个例子: 公共部分类主窗口:窗口 { 公共可观测收集数据源
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>
public主窗口()
{
初始化组件();
this.dataSource=新的ObservableCollection();
Add(newsomeDataSource{Field=“123”});
Add(newsomeDataSource{Field=“1234”});
Add(newsomeDataSource{Field=“12345”});
this.dataGrid1.ItemsSource=this.dataSource;
}
}
公共类数据源
{
公共字符串字段{get;set;}
}
您的集合应该具有公共属性,以便datagrid可以将列绑定到它。
如果使用对象的集合类型,则没有用于绑定的属性,因此将显示空行
下面是一个例子:
公共部分类主窗口:窗口
{
公共可观测收集数据源
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>
public主窗口()
{
初始化组件();
this.dataSource=新的ObservableCollection();
Add(newsomeDataSource{Field=“123”});
Add(newsomeDataSource{Field=“1234”});
Add(newsomeDataSource{Field=“12345”});
this.dataGrid1.ItemsSource=this.dataSource;
}
}
公共类数据源
{
公共字符串字段{get;set;}
}
将ObservableCollection转换为ObservableCollection有什么简单的方法吗?将其设置为类型或记录(如ObservableCollection),或设置为通用方法。或者,如果您确实想要强制转换它,请使用linq通用强制转换方法。(collection.Cast())谢谢大家。我使用了下面的方法,它工作在私有ObservableCollection ConvertObservationClass(IEnumerable ObservableCollection){var data=new ObservableCollection();foreach(ObservableCollection中的var项){data.Add((RecordType)项);}返回数据;}是否有任何简单的方法可以将ObservaleCollection转换为ObservaleCollection?将其设置为类型或记录(如ObservaleCollection),或设置为泛型方法。或者,如果您确实想要强制转换它,请使用linq通用强制转换方法。(collection.Cast())谢谢大家。我使用了下面的方法,它工作在私有ObservableCollection ConvertObservationClass(IEnumerable ObservableCollection){var data=new ObservableCollection();foreach(ObservableCollection中的var项){data.Add((RecordType)项);}返回数据;}
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>