2010-03-24 12 views
0

일부 열이있는 gridview가 있습니다. 이 열 중 하나는 체크 박스 유형입니다. 그런 다음 내 UI에 두 개의 버튼이 있습니다. 하나는 모두 체크 용이고 다른 하나는 모두 체크 해제 용입니다. 버튼을 누를 때 열의 모든 확인란을 선택하고 다른 버튼을 누르면 모든 확인란의 선택을 취소하고 싶습니다. 어떻게해야합니까?WPF gridview에있는 모든 확인란을 선택/선택 취소

일부 코드 조각 :

namespace GParts.Classes 
    { 
    public class RutasCollection 
    { 

    /// <summary> 
    /// Colección de datos de la tabla 
    /// </summary> 
    ObservableCollection<RutasData> _RutasCollection; 

    /// <summary> 
    /// Constructor. Crea una nueva instancia tipo ObservableCollection 
    /// de tipo RutasData 
    /// </summary> 
    public RutasCollection() 
    {    
     _RutasCollection = new ObservableCollection<RutasData>(); 
    } 

    /// <summary> 
    /// Retorna el conjunto entero de rutas en la colección 
    /// </summary> 
    public ObservableCollection<RutasData> Get 
    { 
     get { return _RutasCollection; } 
    } 

    /// <summary> 
    /// Retorna el conjunto entero de rutas en la colección 
    /// </summary> 
    /// <returns></returns> 
    public ObservableCollection<RutasData> GetCollection() 
    { 
     return _RutasCollection; 
    } 

    /// <summary> 
    /// Añade un elemento tipo RutasData a la colección 
    /// </summary> 
    /// <param name="hora"></param> 
    public void Add(RutasData ruta) 
    { _RutasCollection.Add(ruta); } 

    /// <summary> 
    /// Elimina un elemento tipo RutasData de la colección 
    /// </summary> 
    /// <param name="ruta"></param> 
    public void Remove(RutasData ruta) 
    { _RutasCollection.Remove(ruta); } 

    /// <summary> 
    /// Elimina todos los registros de la colección 
    /// </summary> 
    public void RemoveAll() 
    { _RutasCollection.Clear(); } 

    /// <summary> 
    /// Inserta un elemento tipo RutasData a la colección 
    /// en la posición rowId establecida 
    /// </summary> 
    /// <param name="rowId"></param> 
    /// <param name="ruta"></param> 
    public void Insert(int rowId, RutasData ruta) 
    { _RutasCollection.Insert(rowId, ruta); }  

} 

/// <summary> 
/// Clase RutasData 
/// </summary> 
// Registro tabla interficie pantalla 
public class RutasData 
{ 
    public int Id { get; set; } 
    public bool Activa { get; set; } 
    public string Ruta { get; set; }   
} 
} 

내 페이지로드 이벤트에서 내가 할 :
< ...>

    <Classes:SortableListView 
          x:Name="lstViewRutas"          
          ItemsSource="{Binding Source={StaticResource 
              RutasCollectionData}}" ... > 
        <...> 
        <GridViewColumn Header="Activa" Width="50"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <CheckBox x:Name="chkBxF" 
              Click="chkBx_Click" 
              IsChecked="{Binding Path=Activa}"  
              HorizontalContentAlignment="Stretch" 
              HorizontalAlignment="Stretch"/> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
        <...> 
        </Classes:SortableListView> 

        <...> 
        </Page> 

내 데이터

가있는 gridview에 바인딩 개체입니다 그리드 뷰 채우기 :

 // Obtiene datos tabla Rutas 
     var tbl_Rutas = Accessor.GetRutasTable(); // This method returns entire table 

     foreach (var ruta in tbl_Rutas) 
     {     
      _RutasCollection.Add(new RutasData 
      { 
       Id = (int) ruta.Id, 
       Ruta = ruta.Ruta, 
       Activa = (bool) ruta.Activa 
      }); 
     } 

     // Enlaza los datos con el objeto proveedor RutasCollection 
     lstViewRutas.ItemsSource = _RutasCollection.GetCollection(); 

이제는 버튼 하나를 누르면 gridviewcolumn의 모든 체크 박스를 선택/선택 취소하고 싶습니다. 어떻게해야합니까?

다음과 같은 것이 있습니까? itemsource 속성을 수정할 수 있다고하는 오류 메시지가 나타납니다.

private void btnCheckAll_Click(object sender, RoutedEventArgs e) 
    { 

     // Update data object bind to gridview 
     ObservableCollection<RutasData> listas = _RutasCollection.GetCollection(); 
     foreach (var lst in listas) 
     {     
      ((RutasData)lst).Activa = true;     
     } 

     // Update with new values the UI 
     lstViewRutas.ItemsSource = _RutasCollection.GetCollection();    
    } 

고마워요!

답변

3

모든 체크 박스를 선택/선택 해제하지 않아도됩니다. 확인란을 바인딩 할 속성을 설정하기 만하면 확인란이 선택 취소됩니다. 그러나 INotifyPropertyChanged를 구현해야합니다. 이를 통해 기본 속성이 변경되었음을 UI에 알릴 수 있습니다.

변화 당신이 (코드) 속성 액티바를 설정할 때 이제 UI 업데이트하고 확인합니다 귀하의 체크 박스/

당신이 습관이

// Update with new values the UI 
lstViewRutas.ItemsSource = _RutasCollection.GetCollection(); 
을 할 필요가 취소

public class RutasData : INotifyPropertyChanged 
{ 
    public int Id { get; set; } 
    private Boolean _activa; 

    /// <summary> 
    /// Gets and sets the Activa property 
    /// </summary> 
    public Boolean Activa { 
     get { return _activa; } 
     set { 
      if (_activa == value) { } 
      else { 
      _activa = value; 
      NotifyPropertyChanged("Activa"); 
      } 
     } 
    } 

    public string Ruta { get; set; }  


    #region INotifyPropertyChanged Members 

    /// <summary> 
    /// Property Changed event 
    /// </summary> 
    public event PropertyChangedEventHandler PropertyChanged; 

    /// <summary> 
    /// Standard NotifyPropertyChanged Method 
    /// </summary> 
    /// <param name="propertyName">Property Name</param> 
    private void NotifyPropertyChanged(string propertyName) { 
     if (PropertyChanged != null) { 
      PropertyChanged(this, 
      new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

    #endregion  
} 

다음

관련 문제