假设我有一个ObservableCollection(类型MyRow)(称为Rows)行。在MyRow中,我有一堆属性,包括一个ObservableCollection(类型MyRowContents)(称为Contents) - 它基本上是该行中所有内容的列表。 MyRowContents还有几个属性,包括DisplayContents(string)。
例如......对于包含2行和3列的DataGrid,数据结构为2“Rows”,每个包含3个“Contents”。
我在XAML的DataGrid中需要做什么,以便单元格内容显示Rows [i] .Contents [j] .DisplayContents?
编辑:
嗨,抱歉在初始消息中不够清楚。我正在尝试创建一个能够动态显示数据的数据网格(来自提前未知的数据库表)。
我已将此作为指南:http://pjgcreations.blogspot.com.au/2012/09/wpf-mvvm-datagrid-column-collection.html - 我可以动态显示列。
<DataGrid ItemsSource="{Binding Rows}" AutoGenerateColumns="False"
w:DataGridExtension.Columns="{Binding ElementName=LayoutRoot, Path=DataContext.Columns}" />
我只是不知道如何动态显示行数据。
MyRow是:
public class MyRow
{
public int UniqueKey { get; set; }
public ObservableCollection<MyRowContents> Contents { get; set; }
}
MyRowContents是:
public class MyRowContents
{
public string ColumnName { get; set; } // Do I need this?
public object DisplayContents { get; set; } // What I want displayed in the grid cell
}
我的视图模型中有一个公共属性ObservableCollection行,你可以看到我在ItemsSource中绑定的内容。但我不知道如何让每个MyRowContents的“DisplayContents”显示在网格视图中的相应单元格中。
鉴于我可以动态显示列名,可以做出以下假设:内容中的项目顺序(在MyRow中)将与列的顺序相匹配。
由于
答案 0 :(得分:1)
首先,您必须在RowContent中放置行ID,以便您的应用逻辑类似于:
RowContent.cs:
public class RowContent
{
//public string ColumnName { get; set; } "you dont need this property."
public int ID; //You should put row ID here.
public object DisplayContents { get; set; } "What is this property type, is string or int or custom enum??"
}
RowViewModel.cs:
public class RowViewModel
{
public ObservableCollection<MyRowContents> Contents { get; set; }
}
现在你必须把你的Collection放在Window.DataContext中才能在DataGrid中绑定它
MainWindow.xaml.cs:
public partial class MainWindow : Window
{
private RowViewModel rvm = new RowViewModel(); //Here i have made new instance of RowViewModel, in your case you have to put your ViewModel instead of "new RowViewModel();";
public MainWindow()
{
InitializeComponent();
DataContext = rvm; // this is very important step.
}
}
最后一步是在XAML窗口中。
MainWindow.xaml:
<DataGrid ItemsSource="{Binding Path=Contents}" AutoGenerateColumns="false">
<DataGrid.Columns>
<DataGridTextColumn Header="Row ID" Binding="{Binding Path=ID,UpdateSourceTrigger=PropertyChanged}"/>
<DataGridTextColumn Header="your row header" Binding="{Binding Path=DisplayContents,UpdateSourceTrigger=PropertyChanged}"/>
</DataGrid.Columns>
</DataGrid>
有五种类型的DataGridColumn,您必须根据DisplayContents属性的类型选择合适的类型。