我有一個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;
}
在代碼中看不到任何問題(即使c#確實會讓一般情況下難以說明),您是否將自定義模板應用於DataGrid和/或DataGridCells? – 2012-02-25 08:31:13
@ H.B。沒有自定義模板。您在此看到的所有內容都是應用於DataGrid的內容 - 無需額外的XAML。 – 2012-02-25 14:58:29
那麼,當我拿這個代碼,只是改變它的作品來源和各自的綁定。 – 2012-02-25 16:28:38