2012-02-24 39 views
0

我有一個DataGrid從數據庫通過DataSet填充其數據。現在,我需要做的是根據其價值和一系列其他因素着色單元格的背景。IValueConverter問題與WPF DataGridCells

在花了兩天的時間去淘洗互聯網後,我決定使用IValueConverter來執行此操作。寫完我的代碼後,代碼執行得很好;我已經測試過並且已經看到1)IValueConverter類被調用,2)它確實返回一個Brush Color。

我的問題是單元格在運行時沒有使用應用的畫筆調色板着色。

奇怪的是,我知道東西工作,因爲當我選擇的每一行,這都應該是彩色的以不同的顏色突出顯示單元格(在這種情況下,亮白色),比默認的「選擇藍色」。因此,無論出於何種原因,雖然單元格正在轉換並調用IValueConverter,但佈局是而不是顯示它。我還進行了另一個測試,我只是簡單地將CellStyle設置爲直線顏色(在這種情況下爲LimeGreen),並完全忽略了IValueConverter,並將細胞DID顯示在石灰綠色中。這導致我相信Binding和Convert()之間的某些地方是錯誤的。

我對於爲什麼不顯示轉換顏色感到非常困惑,並且我在Google的前幾頁已經用盡了所有的搜索結果,所以我希望這裏有人可以看看我的代碼並指出我明白爲什麼DataGrid會這樣做。

DataTable dt = new DataTable(); 
     dt = ((DataSet)ItemSource).Tables[0]; 
     int counter = 0; 

     foreach (DataColumn dc in dt.Columns) 
     { 
      switch(dc.ColumnName) 
      { 
      (....) 
      case "SEAPCT": 
        DataGridTextColumn col2 = new DataGridTextColumn(); 

        col2.Header = (((DataSet)ItemSource).Tables[0].Columns[counter].ToString()).Replace("PCT", "%"); 
        col2.Binding = new Binding(dc.ColumnName); 

        Style style = new Style(typeof(DataGridCell)); 

        Setter setter = new Setter(); 
        setter.Property = DataGridCell.BackgroundProperty; 

        Binding b = new Binding(dc.ColumnName); 
        b.Converter = new PercentCellConverter(); 

        setter.Value = b; 
        style.Setters.Add(setter); 

        col2.CellStyle = style; 


        DashboardGrid.Columns.Insert(counter, col2); 
        counter++; 
        break; 
      } 
     } 

     DashboardGrid.ItemsSource = dt.DefaultView; 
    } 

而且,僅供參考,我的IValueConverter類:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     string n = value.ToString(); 
     System.Diagnostics.Debug.WriteLine(n); 

     if (double.Parse(n) > 0) 
      return Brushes.LimeGreen; 
     else if (double.Parse(n) == 0) 
      return Brushes.Yellow; 
     else 
      return Brushes.Red; 

    } 
+0

在代碼中看不到任何問題(即使c#確實會讓一般情況下難以說明),您是否將自定義模板應用於DataGrid和/或DataGridCells? – 2012-02-25 08:31:13

+0

@ H.B。沒有自定義模板。您在此看到的所有內容都是應用於DataGrid的內容 - 無需額外的XAML。 – 2012-02-25 14:58:29

+0

那麼,當我拿這個代碼,只是改變它的作品來源和各自的綁定。 – 2012-02-25 16:28:38

回答

1

我想通了:我IValueConverter類,我用System.Drawing.Brushes代替System.Windows.Media.Brushes。所以,雖然我的轉換器WAS正常工作,但顏色並未顯示,因爲我正在返回錯誤類型的顏色組。

+0

我想你可以很容易地調試這個,我沒有提到你應該看看Visual Studio的輸出窗口,因爲綁定本身工作(如轉換器被調用)。綁定錯誤出現在該窗口中,因此您應該看到由轉換器引起的無效類型分配拋出的異常。 – 2012-02-27 17:32:14

+0

@ H.B。好的,我真的應該有。不知道爲什麼我沒有。我完全忘記了裏面有兩個刷子的命名空間,這些命名空間使事情複雜化了。 – 2012-02-27 17:44:13