Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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
C# WPF以编程方式设置DataGridTextColumn的数据绑定';显示索引_C#_Wpf_Data Binding_Datagrid - Fatal编程技术网

C# WPF以编程方式设置DataGridTextColumn的数据绑定';显示索引

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

我目前以编程方式为我的DataGrid生成我的
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
    }