2010-03-24 97 views
0

我有一些列的gridview。其中一列是复选框类型。然后,我在我的用户界面中有两个按钮,一个用于全部检查,另一个用于取消全部检查。我想在按下a按钮时检查列中的所有复选框,并在按下另一个按钮时取消选中所有复选框。我怎样才能做到这一点?WPF检查/取消选中位于gridview中的所有复选框

一些代码片段:
< ...>

    <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的是:

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

,并在我的网页加载事件,我做这填充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(); 

一切正常,但现在我想检查/取消选中GridView列中的所有复选框,当我按下一个按钮或另一个。我怎样才能做到这一点?

像这样的东西?我收到一个错误,说我可以修改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知道底层属性已经改变。

变化以下

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  
} 

现在,当您设置该属性的Activa(代​​码)的UI将会更新,您的复选框会检查/取消

你不会需要做到这一点

// Update with new values the UI 
lstViewRutas.ItemsSource = _RutasCollection.GetCollection(); 
相关问题