2011-07-03 11 views
0

私はvs2010で作業しています。 私は、 ObservableCollectionのリストにバインドされているDataGridを作成しました。WPF DataGrid-DataGridCheckBoxColumn vs2010 c#.net

Class_CMDは次のようになります。

public class Class_RetrieveCommand 
{ 
    public string CMD { get; set; } 
    public bool C_R_CMD { get; set; } 
    public bool S_CMD { get; set; } 
    public bool C_S_CMD { get; set; } 
} 

は、私は別のウィンドウに渡す4つのデリゲートを持っており、このウィンドウには、実行時にリストを更新する必要があります。実行時には、グリッドの文字列が常に更新されていますが、DataGridCheckBoxColumnsは決して更新されません。

のDataGrid - ブール値は更新デリゲートの

<DataGrid Background="Transparent" x:Name="DataGrid_CMD" Width="450" MaxHeight="450" Height="Auto" ItemsSource="{Binding}" AutoGenerateColumns="True"> 

1 -

public void UpdateC_S_CMD(string Msg) 
    { 
     foreach (Class_CMD c in List.ToArray()) 
     { 
      if (c.CMD.Equals(Msg)) 
       c.C_S_CMD = true; 
     } 
    } 

ブール列が更新されない理由を私は理解していない.... することができます誰も助けてください?ありがとう。

答えて

2

クラスClass_RetrieveCommandは、INotifyPropertyChangedインターフェイスを実装する必要があります。それ以外の場合、クラスのインスタンスにバインドされた個々の行データは、基本となるプロパティーが変更されたことを認識しません。

public class Class_RetrieveCommand : INotifyPropertyChanged 
{ 
    private bool _cRCmd; 
    private bool _cSCmd; 
    private string _cmd; 
    private bool _sCmd; 

    public string CMD 
    { 
     get { return _cmd; } 
     set 
     { 
      _cmd = value; 
      InvokePropertyChanged(new PropertyChangedEventArgs("CMD")); 
     } 
    } 

    public bool C_R_CMD 
    { 
     get { return _cRCmd; } 
     set 
     { 
      _cRCmd = value; 
      InvokePropertyChanged(new PropertyChangedEventArgs("C_R_CMD")); 
     } 
    } 

    public bool S_CMD 
    { 
     get { return _sCmd; } 
     set 
     { 
      _sCmd = value; 
      InvokePropertyChanged(new PropertyChangedEventArgs("S_CMD")); 
     } 
    } 

    public bool C_S_CMD 
    { 
     get { return _cSCmd; } 
     set 
     { 
      _cSCmd = value; 
      InvokePropertyChanged(new PropertyChangedEventArgs("C_S_CMD")); 
     } 
    } 

    #region INotifyPropertyChanged Members 

    public event PropertyChangedEventHandler PropertyChanged; 

    #endregion 

    public void InvokePropertyChanged(PropertyChangedEventArgs e) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) 
     { 
      handler(this, e); 
     } 
    } 
} 
+0

ありがとう、私は今それを試してみます。 –

+0

それは、非常に感謝します!!!!!!! –

1

あなたはこのようClass_RetrieveCommandINotifyPropertyChangedを実装する必要があります:

public class Class_RetrieveCommand : INotifyPropertyChanged 
{ 
    private string _CMD; 
    public string CMD 
    { 
     get { return _CMD; } 
     set { _CMD = value; OnPropertyChanged("CMD"); } 
    } 

    ... similar for the other properties 

    public event PropertyChangedEventHandler PropertyChanged; 
    private void OnPropertyChanged(string propertyName) 
    { 
     var handler = PropertyChanged; 
     if (handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

残念ながらあなたはautoを使用することはできませんあなたはこのようなものに変更した場合は、変更がグリッドに反映されるはずです(あなたはプロキシジェネレータに頼ることを除いて)。

+0

ありがとうございます! –

関連する問題