2016-06-14 70 views
1

在我的申請中,我有一個Server類,它具有公共屬性NameConnected如何編輯DataGrid控件wpf中的單元格類型?

Connected是一個bool,它由Server類的每個實例更新。

現在我有DataGrid這是自動生成服務器列表的服務器列中的列。

有沒有辦法改變dataGrid,以便當Connected爲真時顯示「已連接」,當Connected爲假時顯示「已斷開連接」?

+0

數據網格控制,編輯我的職務,以反映這一點。對混淆抱歉。 –

+0

絕對需要'自動生成列嗎?在xaml中定義2列可能更簡單 – ASh

回答

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


另一個想法:做一個特殊的屬性在視圖模型連接狀態描述。

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; 
} 
+0

謝謝您的詳細回覆! –

相關問題