2016-06-14 21 views
1

私のアプリケーションでは、公共のプロパティNameConnectedを持つServerクラスを持っています。DataGridコントロールwpfでセルの種類を編集するには?

Connectedは、Serverクラスの各インスタンスによって更新されるブールです。

現在、私はサーバーと呼ばれるサーバーのリストから列を自動生成するDataGridを持っています。

Connectedがtrueで、Connectedがfalseのときに "Disconnected"と表示されるように、dataGridを変更する方法はありますか?

+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


別のアイデア:接続用の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; 
} 
+0

詳細な応答をありがとう! –