我有一个名为TestData的对象,它包含两个属性,一个字符串和一个ObservableCollection。我有一个ObservableCollection,用于在代码中的DataGrid中生成列。我没有问题根据TestData对象动态生成DataGridTextColumn及其各自的头,但我无法将DataGridTextColumn Binding属性绑定到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;
}
}
}
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);
}
}
}
}
XAML MainWindow.xaml
<Grid>
<DataGrid AutoGenerateColumns="False" Height="Auto" HorizontalAlignment="Stretch" Name="spreadSheet" VerticalAlignment="Stretch" Width="Auto" />
</Grid>
如果我在我的ObservableCollection中放置了4个TestData对象,我的标题很好,但TestData对象中的ObservableCollection中的所有数据都只显示为DataGrid中的(Collection)。
提前致谢!
答案 0 :(得分:0)
我认为你没有正确看待这一点 您不会将单个字符串的单独集合绑定到每个列 您将行和列的单个二维集合作为一个整体绑定到DataGrid。
请注意,列没有ItemsSource属性。只有路径属性。 DataGridTextColumn
DataGrid有一个ItemsSource属性。 DataGrid
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 ...
MyRows绑定到DataGrid(不是列)