WPF DataGrid 綁定 ItemsSource 時,首次載入資料常出現列標題與內容錯位的詭異現象。經實測排除顯卡因素後,歸納出四種解決方案,並對比 DataTable 與集合作為數據源的優劣,助你快速定型專案架構。
綁定屬性型集合時,首次賦值即觸發列位移:


根因可能涉及 DataGrid 內部渲染管線在無列定義時自動生成列的時序競爭,或 RowHeaderWidth 預設值導致佈局誤差。
dataGrid.ItemsSource = list,效果不穩定,視專案而定。| 維度 | DataTable.DefaultView | 集合 |
|---|---|---|
| 開發便利性 | 直接綁定,無需轉換 | 需將資料映射為物件集合 |
| 欄位增減彈性 | 只改 SQL,UI 無須動 | UI 需同步調整列定義 |
| 效能(大數據) | 理論較省,資料源未變不重繪 | 每次重繪,理論較耗資源 |
| 列寬控制 | 需代碼設定,可能耗效能 | XAML 直接設定 |
| 空資料呈現 | 完全空白,體驗差 | 保留列標題 |
| 適用場景 | 大數據、唯讀顯示 | 中小數據、需操作、含 CheckBox/ComboBox |
綜上,若專案以唯讀報表為主且數據量大,DataTable 更佳;若需豐富互動、編輯或模板化,集合配合 RowHeaderWidth="0" 為最穩健組合。