如何在DataGrid控件wpf中编辑单元格类型?

时间:2016-06-14 14:39:25

标签: c# wpf datagrid

在我的应用程序中,我有一个Server类,其中包含公共属性NameConnected

Connected是一个bool,由Server类的每个实例更新。

现在我有DataGrid,它从名为服务器的服务器列表中自动生成列。

有没有办法更改dataGrid,以便显示"已连接"当Connected为真且"断开连接时#34;当Connected为假时?

1 个答案:

答案 0 :(得分:0)

如果使用AutoGenerateColumns,则可以在后面的代码中处理AutoGeneratingColumn事件并修改新创建的Connected DataGridCheckBoxColumn。我要做的是创建一个触发器,它将根据ChechBox检查状态更改状态文本:

private void DataGridAutoGeneratingColumnHandler(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    if (e.PropertyName == "Connected")
    {
        var c = e.Column as DataGridCheckBoxColumn;
        if (c == null)
            return;
        c.IsReadOnly = true;
        c.ElementStyle =
            new Style
            {
                TargetType = typeof (CheckBox),
                Setters =
                {
                    new Setter { Property = ContentProperty, Value = "Disconnected" },
                    // prevent checking CheckBoxes 
                    new Setter { Property = IsHitTestVisibleProperty, Value = false },
                },
                Triggers =
                {
                    new Trigger
                    {                                
                        Property = CheckBox.IsCheckedProperty, 
                        Value = true,
                        Setters =
                        {
                            new Setter { Property = ContentProperty, Value = "Connected" }
                        }
                    }
                }
            };
    }
}

result

<小时/> 另一个想法:在viewModel中创建一个特殊属性,用于连接状态描述。

public class Server
{
    public string Name { get; set; }

    public bool Connected { get; set; }

    public string ConnectionStatus
    {
        get { return Connected ? "Connected" : "Disconnected"; }
    }
}

然后禁用Connected属性

的列生成
private void DataGrid_AutoGeneratingColumnHandler(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    if (e.PropertyName == "Connected")
        e.Cancel = true;
}