C# WPF以编程方式设置DataGridTextColumn的数据绑定';显示索引
我目前以编程方式为我的DataGrid生成我的C# WPF以编程方式设置DataGridTextColumn的数据绑定';显示索引,c#,wpf,data-binding,datagrid,C#,Wpf,Data Binding,Datagrid,我目前以编程方式为我的DataGrid生成我的DataGridTextColumns。我使用textColumn.Binding=newbinding(BindingName)设置它们的数据绑定。这将该列内容的数据绑定设置为DataGrid的ItemsSource绑定到的数组中的属性 但是,我还希望将列的DisplayIndex属性绑定到ViewModel中的属性 我很难弄清楚如何自行为DataGridTextColumn设置数据绑定。我该怎么办 数据网格: <Da
DataGridTextColumn
s。我使用textColumn.Binding=newbinding(BindingName)设置它们的数据绑定代码>。这将该列内容的数据绑定设置为DataGrid
的ItemsSource
绑定到的数组中的属性
但是,我还希望将列的DisplayIndex
属性绑定到ViewModel中的属性
我很难弄清楚如何自行为DataGridTextColumn
设置数据绑定。我该怎么办
数据网格:
<DataGrid x:Name="QuickStatsDataGrid"
AutoGenerateColumns="False"
ItemsSource="{Binding QuickStatistics.UserQuickStats}"
Grid.Row="1"
Grid.RowSpan="2"
DockPanel.Dock="Top">
<DataGrid.Columns>
</DataGrid.Columns>
</DataGrid>
编辑:相应的属性位于我的ViewModel中。似乎没有必要发布ViewModel,让我们假设在MyViewModel
中有一个名为ColumnDisplayIndex
的属性
编辑:添加到我的方法中。当我通过编程或将列拖到新位置更改索引时,ViewModel中的属性似乎不会更新
private void AddColumn()
{
DataGridTextColumn textColumn = new DataGridTextColumn();
BindingOperations.SetBinding(textColumn, DataGridColumn.DisplayIndexProperty, new Binding(DisplayIndexBindingName) { Source = viewModel });
textColumn.DisplayIndex = Index;
textColumn.Header = Name;
textColumn.Binding = new Binding(BindingName);
textColumn.MinWidth = 20;
TextColumn = textColumn;
CreatedColumn = true;
DataGridOwner.Columns.Add(textColumn); // Datagrid owner is the DataGrid
}
每个列都有不同的DisplayIndex,这意味着您的视图模型应该有不同的DisplayIndex对应的绑定值,所以它们在哪里?我在ViewModel中为每个项显示索引提供了相应的属性。但是,我不知道如何将DataGridTextColumn
的特定属性绑定到它们。似乎没有必要发布ViewModel,让我们假设在MyViewModel
中有一个名为ColumDisplayIndex
的int属性。您有权在AddColumn
方法中访问视图模型吗?谢谢您的回复。如果有必要,我可以将ViewModel的引用传递给包含AddColumn
方法的对象。Binding
可以像BindingOperations.SetBinding(textColumn,DataGridColumn.DisplayIndexProperty,新绑定(“ColumnDisplayIndex”){Source=yourViewModel})一样进行设置代码>
private void AddColumn()
{
DataGridTextColumn textColumn = new DataGridTextColumn();
BindingOperations.SetBinding(textColumn, DataGridColumn.DisplayIndexProperty, new Binding(DisplayIndexBindingName) { Source = viewModel });
textColumn.DisplayIndex = Index;
textColumn.Header = Name;
textColumn.Binding = new Binding(BindingName);
textColumn.MinWidth = 20;
TextColumn = textColumn;
CreatedColumn = true;
DataGridOwner.Columns.Add(textColumn); // Datagrid owner is the DataGrid
}