将列表绑定到datagrid

时间:2014-04-29 12:55:21

标签: c# wpf xaml datagrid

我有一个带有数据网格的WPF应用程序。在加载时,我的ViewModel填充一个名为HldChangeList的列表。此列表绑定到数据网格。该列表包含约。 200个项目,但此刻该列表显示10个空行但没有列标题。我已经停止了我的二传手,可以看到代码到达那里。不确定我还缺少什么。

查看模型

 private List<HoldingPrePost> _hldChangeList;

 public List<HoldingPrePost> HldChangeList
    {
        get
        {
            return _hldChangeList;
        }
        set
        {
            _hldChangeList = value;
            OnPropertyChanged("HldChangeList");
        }
    }

XAML

<DataGrid x:Name="dataGridHoldings"  
                  DataContext="{Binding HldChangeList}" 
                  AutoGenerateColumns="False"
                  HorizontalAlignment="Stretch" 
                  VerticalAlignment="Stretch"
                  Background="Silver"
                  RowHeaderWidth="30"  
                  ItemsSource="{Binding Path=HldChangeList, UpdateSourceTrigger=PropertyChanged}"
                  Style="{StaticResource DataGridTemplate}"  
                  ColumnHeaderStyle="{StaticResource DG_ColumnHeader}"                                            
                  RowStyle="{StaticResource DG_Row}"
                  CellStyle="{StaticResource DG_Cell}"                                    
                  RowHeaderStyle="{StaticResource DG_RowHeader}"
                  Margin="15,5,20,15" >
            <DataGridTextColumn Header="ABC" Binding="{Binding ABC}"  IsReadOnly="True"/>
            <DataGridTextColumn Header="DEF" Binding="{Binding DEF}"  IsReadOnly="True"/>
            <DataGridTextColumn Header="GHI" Binding="{Binding GHI}"  IsReadOnly="True"/>
        </DataGrid>

2 个答案:

答案 0 :(得分:2)

您将DataContextItemsSource设置为HldChangeList

<DataGrid 
    DataContext="{Binding HldChangeList}" 
    ItemsSource="{Binding Path=HldChangeList, UpdateSourceTrigger=PropertyChanged}"/>

WPF将在当前绑定上下文中搜索HldChangeList项源属性,您也将其设置为HldChangeList,因此在您的情况下,它将查找HldChangeList.HldChangeList属性。如果HldChangeList已经是当前绑定上下文的一部分,那么您不需要更改DataContext,否则您需要将其设置为包含HldChangeList属性的内容

修改

您忘记将列定义括在DataGrid.Columns代码

<DataGrid x:Name="dataGridHoldings" ... ItemsSource="{Binding Path=HldChangeList}">
    <DataGrid.Columns>
        <DataGridTextColumn Header="ABC" Binding="{Binding ABC}"  IsReadOnly="True"/>
        <DataGridTextColumn Header="DEF" Binding="{Binding DEF}"  IsReadOnly="True"/>
        <DataGridTextColumn Header="GHI" Binding="{Binding GHI}"  IsReadOnly="True"/>
    </DataGrid.Columns>
</DataGrid>

答案 1 :(得分:1)

正如dkozl所说,

您需要明确设置ItemsSource DataGrid而不设置DataContext或隐式设置DataContext

<强>隐

   <DataGrid ... 
          DataContext="{Binding HldChangeList}" ... 
          ItemsSource="{Binding}" ... />

<强>显

   <DataGrid ... 
          ItemsSource="{Binding HldChangeList}" ... />