Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据网格在绑定到ObservableCollection时显示空行<;对象>;_C#_Datagrid_Observablecollection - Fatal编程技术网

C# 数据网格在绑定到ObservableCollection时显示空行<;对象>;

C# 数据网格在绑定到ObservableCollection时显示空行<;对象>;,c#,datagrid,observablecollection,C#,Datagrid,Observablecollection,我有一个简单的DataGrid,我绑定到一个ObservableCollection,它在网格中生成黑色的小线条,没有可见的数据。我使用ObservableCollection,因为我在运行时使用反射构建了集合 我正在做这样的事情 XAML C# 公共可观测收集数据 { 获取{return_Data;} 集合{ 这个。_交易=价值; 本协议。NotifyPropertyChanged(“交易”); } } 公营 { 需要在运行时传递this.Data=CreateData(typeof(M

我有一个简单的DataGrid,我绑定到一个ObservableCollection,它在网格中生成黑色的小线条,没有可见的数据。我使用ObservableCollection,因为我在运行时使用反射构建了集合

我正在做这样的事情 XAML


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>