我有下一堂课:
public class GridViewControlModel : NotificationObject
{
DataTable datasource;
public DataTable Datasource
{
get
{
return datasource;
}
set
{
datasource = value;
RaisePropertyChanged("Datasource");
}
}
ObservableCollection<string> fieldsNames;
public ObservableCollection<string> FieldsNames
{
get
{
if (fieldsNames == null)
{
fieldsNames = new ObservableCollection<string>();
}
return fieldsNames;
}
set
{
fieldsNames = value;
RaisePropertyChanged("FieldsNames");
}
}
//and more properties
}
属性“FieldsNames”包含我希望绑定到GridView数据列标题的列标题列。
在我的ViewModel中我创建了属性 - GridViewControlModel CurrentGridViewData,我想将我的GridView列标题绑定到我的CurrentGridViewData.FieldsNames [索引]
例如
<dxg:GridColumn1 Header="{Binding CurrentGridViewData, Path=CurrentGridViewData.FieldsNames[0]}">
<dxg:GridColumn2 Header="{Binding CurrentGridViewData, Path=CurrentGridViewData.FieldsNames[1]}">
依旧...... 我正在使用DevExpress gridCointrol,但我不认为它的问题。
如何将属性绑定到特定的ObservableCollection索引?
我会解释我想做什么。 我有很多视图的GridControl。 当用户切换视图时,网格控件需要更改其整个结构(不同的列数,列标题,列大小,类型等)。我创建了一个包含每个视图的所有属性和设置的类(我的问题中的这个CurrentGridViewData类),当用户切换视图时,我将CurrentGridViewData的引用更改为右视图实例,并通过绑定我想要进行所有网格更改。 还有更好的方法吗?
由于
由于
我想我找到了与DevExpress GridControl相关的可能解决方案。 看下一个链接 http://documentation.devexpress.com/#wpf/CustomDocument10121
你在想什么?它比使用DataTemplate更好吗?由于
答案 0 :(得分:1)
我的解决方案是为要绑定到DataGrid的每个模型创建一个DataTemplate。
例如,假设您有3个不同的DataTables:OrdersDataTable,CustomersDataTable和ProductsDataTable。
首先要用简单的ContentControl替换你的DataGrid控件。
<ContentControl Content="{Binding DataTable}"/>
然后在您的应用程序资源中添加并创建这些DataTemplate。
<DataTemplate DataType="{x:Type local:OrdersDataTable}">
<DataGrid ItemsSource="{Binding}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding ID}" Header="ID"/>
<DataGridTextColumn Binding="{Binding Tax}" Header="Tax"/>
<DataGridTextColumn Binding="{Binding NetAmount}" Header="NetAmount"/>
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
<DataTemplate DataType="{x:Type local:CustomersDataTable}">
<DataGrid ItemsSource="{Binding}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding ID}" Header="ID"/>
<DataGridTextColumn Binding="{Binding FirstName}" Header="First name"/>
<DataGridTextColumn Binding="{Binding LastName}" Header="Last name"/>
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
<DataTemplate DataType="{x:Type local:ProductsDataTable}">
<DataGrid ItemsSource="{Binding}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding ID}" Header="ID"/>
<DataGridTextColumn Binding="{Binding Name}" Header="Name"/>
<DataGridTextColumn Binding="{Binding Quantity}" Header="Quantity"/>
<DataGridTextColumn Binding="{Binding UnitPrice}" Header="UnitPrice"/>
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
这样,当您将DataTable绑定到内容控件时,它将查找具体的DataTable类型并抓取应用程序资源以查找相应的DataTemplate以显示您的DataTable。
我建议使用Style作为DataGrid控件,这样就不必在所有DataTemplate中重现样式。
注意:DataGrid.ItemsSource可能不适合你,只是适应它。