3

.NET3.5を使用しています

その列の値がfalseの場合に背景色を赤に変えたい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;
            }
        }
    }
4

4 に答える 4

7

クラスのConverterプロパティ を使用します。Binding

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

Bindingコードでは、バインディングをのプロパティに割り当てていますDataGridTextColumnが、そのプロパティはセルの内容のみを制御します。セルの外観を表示するには、スタイルが必要です。スタイルは、コードビハインドで設定することもできます。

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

そのコードでは、は新しいオブジェクト(または上記のコンストラクターと初期化呼び出しをすぐに呼び出す)bindingを持つ変数になります。のドキュメントでBinding説明されているように、スタイルのターゲットタイプはである必要があり、そのクラスはから継承するため、などのの依存関係プロパティのセッターを追加できます。DataGridTextColumn.CellStyleDataGridCellControlControlBackground

現在、このコードをテストすることはできません。それがあなたにどのように進めるかについてのアイデアを与えることを願っています。

于 2012-08-24T12:12:40.460 に答える
0
var binding = new Binding("CanConnect") {
   Converter = new IsConnectedConverter()
};
DataGridTextColumn column = new DataGridTextColumn() { Header = "Can Connect", Binding = binding };
于 2012-08-24T12:13:31.190 に答える
0

Converterの設定には、クラス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;
}
于 2012-08-24T12:14:10.347 に答える
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);
于 2012-08-28T14:01:24.953 に答える