如果使用AutoGenerateColumns,则可以在后面的代码中处理AutoGeneratingColumn事件并修改新创建的ConnectedDataGridCheckBoxColumn。我要做的是创建一个触发器,它将根据 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" }
}
}
}
};
}
}
另一个想法:在 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;
}