2012-08-24 38 views
2

我使用.NET 3.5動態添加的IValueConverter在後面的代碼

我有,我想將背景色紅色,當該列的值是假的一個DataGridTextColumn。我已經看到了XMAL完成這件事,但無法弄清楚如何做到這一點在後面的代碼

DataGridTextColumn column = new DataGridTextColumn() { Header = "Can Connect", Binding = new Binding("CanConnect") }; 
//How to add the converter here so that the background of the cell turns red when CanConnect = false? 

    public class IsConnectedConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      bool input = (bool)value; 
      switch (input) 
      { 
       case true: 
        return DependencyProperty.UnsetValue; 
       default: 
        return Brushes.Red; 
      } 
     } 
    } 

回答

5

使用Binding類的Converter property

new Binding("CanConnect") { 
    Converter = new IsConnectedConverter() 
} 

在你的代碼,你要分配的結合DataGridTextColumnBinding屬性,但該屬性僅控制單元格的內容。對於電池的外觀,你會需要一個風格,這也可以在代碼隱藏設置:

Style st = new Style(typeof(DataGridCell)); 
st.Setters.Add(new Setter(Control.BackgroundProperty, binding)); 
column.CellStyle = st; 

在該代碼中,binding將與新Binding對象的變量(或以上構造和初始化呼叫)。如docs on DataGridTextColumn.CellStyle所述,樣式的目標類型必須是DataGridCell,並且該類繼承自Control,因此我們可以爲Control的依賴項屬性添加設置器,例如Background

恐怕我現在無法測試此代碼;我希望它給你一個關於如何着手的想法。

+0

只是將字符串「#FFFF0000」放入列單元格中的嗯。我如何定位背景顏色? – Bob

+0

@Bob:啊,我假設你正在分配'Binding'對象的屬性已經是正確的了。在我看來,只能使用'Style'屬性設置背景顏色。請給我一點時間思考一些代碼。 –

+0

@Bob:我已經更新了我的答案,並希望這個解決方案能夠工作:-) –

0
var binding = new Binding("CanConnect") { 
    Converter = new IsConnectedConverter() 
}; 
DataGridTextColumn column = new DataGridTextColumn() { Header = "Can Connect", Binding = binding }; 
0

對於設置轉換器,你可以使用Converter財產Binding類:

DataGridTextColumn column = new DataGridTextColumn(); 
column.Header = "Can Connect"; 
Binding binding = new Binding("CanConnect"); 
binding.Converter = new IsConnectedConverter(); 
column.Binding = binding; 

,你不應該爲布爾變量使用switch。這是更好的:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
{ 
    bool input = (bool)value; 
    if (input) 
    { 
     return DependencyProperty.UnsetValue; 
    } 
    return Brushes.Red; 
} 
+0

嗯,只是把字符串「#FFFF0000」在列單元格中。我如何定位背景顏色? – Bob

0

只是爲了補充。我需要將轉換器設置爲風格的綁定而不是列的綁定:

 Binding columnBinding = new Binding("CanConnect"); 
     Binding styleBinding = new Binding("CanConnect") { Converter = new IsConnectedConverter()}; 
     Style st = new Style(typeof(DataGridCell)); 
     st.Setters.Add(new Setter(Control.BackgroundProperty, styleBinding)); 
     column.CellStyle = st; 
     column.Binding = columnBinding; 
     dataGrid.Columns.Add(column); 
相關問題