Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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
Wpf 将DataGrid列绑定到另一个对象内的集合_Wpf_Data Binding_Datagrid - Fatal编程技术网

Wpf 将DataGrid列绑定到另一个对象内的集合

Wpf 将DataGrid列绑定到另一个对象内的集合,wpf,data-binding,datagrid,Wpf,Data Binding,Datagrid,我有一个名为TestData的对象,它包含两个属性,一个字符串和一个ObservableCollection。我有一个ObservableCollection,用于在代码中的DataGrid中生成列。基于TestData对象动态生成DataGridTextColumn及其各自的标题没有问题,但是我无法将DataGridTextColumn绑定属性绑定到TestData内部的ObservableCollection 现在,我已经用文字说明了问题,让我通过张贴代码来澄清它: TestData.cs

我有一个名为TestData的对象,它包含两个属性,一个字符串和一个ObservableCollection。我有一个ObservableCollection,用于在代码中的DataGrid中生成列。基于TestData对象动态生成DataGridTextColumn及其各自的标题没有问题,但是我无法将DataGridTextColumn绑定属性绑定到TestData内部的ObservableCollection

现在,我已经用文字说明了问题,让我通过张贴代码来澄清它:

TestData.cs

public class TestData
{
    private ObservableCollection<string> data = new ObservableCollection<string>();
    public string Header { get; set; }
    public ObservableCollection<string> Data
    {
        get
        {
            return data;
        }

        set
        {
            data = value;
        }
    }
}
公共类TestData
{
私有ObservableCollection数据=新ObservableCollection();
公共字符串头{get;set;}
公共可观测收集数据
{
得到
{
返回数据;
}
设置
{
数据=价值;
}
}
}
MainWindow.xaml.cs代码隐藏

public partial class MainWindow : Window
{
    private ViewModel viewModel = new ViewModel();
    private List<string> headers = new List<string>();
    private ObservableCollection<TestData> mainData = new ObservableCollection<TestData>();        


    public MainWindow(ViewModel vm)
    {
        InitializeComponent();
        viewModel = vm;
        this.DataContext = viewModel;     


        mainData = viewModel.MainData;

        this.spreadSheet.ItemsSource = viewModel.MainData;            

        foreach (TestData data in mainData)      
        {
            if (headers.Contains(data.Header) == false)
            {
                headers.Add(data.Header);
                DataGridTextColumn col = new DataGridTextColumn();                    
                int x = viewModel.MainData.IndexOf(data);                    
                Binding bind = new Binding("Data");                    
                bind.BindsDirectlyToSource = true;                    
                bind.Source = mainData[x];                    
                col.Binding = bind;
                col.Header = data.Header;                                      
                this.spreadSheet.Columns.Add(col);        
            }

        }
    }
}
公共部分类主窗口:窗口
{
private ViewModel ViewModel=new ViewModel();
私有列表头=新列表();
私有ObservableCollection mainData=新ObservableCollection();
公共主窗口(ViewModel vm)
{
初始化组件();
viewModel=vm;
this.DataContext=viewModel;
mainData=viewModel.mainData;
this.spreadSheet.ItemsSource=viewModel.MainData;
foreach(mainData中的TestData数据)
{
if(headers.Contains(data.Header)==false)
{
headers.Add(data.Header);
DataGridTextColumn col=新DataGridTextColumn();
int x=viewModel.MainData.IndexOf(数据);
绑定=新绑定(“数据”);
bind.BindsDirectlyToSource=true;
bind.Source=mainData[x];
col.Binding=绑定;
列标题=数据标题;
这个.spreadSheet.Columns.Add(col);
}
}
}
}
XAML MainWindow.XAML

<Grid>                
    <DataGrid   AutoGenerateColumns="False" Height="Auto" HorizontalAlignment="Stretch"  Name="spreadSheet" VerticalAlignment="Stretch"  Width="Auto" />

</Grid>

如果我在ObservaleCollection中放置4个TestData对象,我可以很好地获得它们的标题,但是TestData对象中ObservaleCollection中的所有数据在DataGrid中都显示为(Collection)


提前谢谢

我认为你没有正确地看待这个问题。
您不能将一个单独的集合和一个字符串绑定到每一列。
将单个二维行和列集合作为一个整体绑定到DataGrid

请注意,列没有ItemsSource属性。只有路径属性。

DataGrid具有ItemsSource属性

公共类Myrow
{
公共字符串Col1{get;private set;}
公共字符串Col2{get;private set;}
公共Myrow(字符串col1,字符串col2){col1=col1,col2=col2}
}
可观察收集Myrows。。。

MyRows绑定到DataGrid(而不是列)

问题是,我不知道要显示多少列数据,也不知道要显示多少行数据。您可以将集合绑定到特定列,如这里的XAML所示,但我需要动态绑定到驻留在对象内部的集合。错误。“获取或设置将列与数据源中的属性关联的绑定”。我知道怎么解决这个问题。你从我的答案上贴了一个链接,完全错误地引用了。在我指出没有ItemsSource属性之后。你是独立的。他们不是在使用DatGridTextColumn中的Binding属性(在我们都指出的示例中,LOL)绑定到列表吗?但在该链接中没有说“将集合绑定到特定列”,这是你自己编的。“将列与属性关联”的哪一部分不清楚?我明白你的意思。也许我应该考虑扩展DataGridTextColumn并添加对绑定到集合的支持。
public class Myrow 
{
    public string Col1 { get; private set; }  
    public string Col2 { get; private set; } 
    public Myrow (string col1, string col2) { Col1 = col1, Col2 = Col2 }
}

ObservableCollection<Myrow> Myrows ...