2014-04-29 65 views
0

我有一個數據網格的WPF應用程序。在加載時,我的ViewModel填充名爲HldChangeList的列表。該列表綁定到數據網格。該清單包含約。 200項,但目前列表顯示10個空行但沒有列標題。我已經在我的setter中停下了腳步,可以看到代碼已經到達那裏。不知道我還缺少什麼。數據網格的綁定列表

視圖模型

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> 
+0

你如何填充您的列表設置其DataContext或含蓄?你一次加載所有的項目,然後做單一'HldChangeList'更新? – dkozl

+0

HoldingPrePost的外觀如何?此外,剝離所有不必要的東西,直到它工作,如刪除樣式,列和使自動生成列真實。 –

+0

是的,我一次加載所有的項目。 HldChangeList = db.GetChangeList()GetChangeList返回列表 mHelpMe

回答

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> 
+0

當我刪除I​​temSource行時,datagrid仍然是空的。這是否意味着DataContext沒有正確綁定 – mHelpMe

+0

「HldChangeList」定義在哪裏?在'Window'還是一些視圖模型? – dkozl

+0

HldChangeList在我的視圖模型中定義。我刪除了datacontext,並使用了ItemSource。當我這樣做時,我有一個錯誤消息 - 「在使用ItemSource之前Items收集必須爲空」 – mHelpMe

1

正如dkozl說,

需要設置您DataGrid 210沒有明確通過設置DataContext

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

明確

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