【问题标题】:WPF Check/Uncheck all checkboxes located in a gridviewWPF 检查/取消选中位于网格视图中的所有复选框
【发布时间】:2011-01-31 11:18:57
【问题描述】:

我有一个带有一些列的网格视图。其中一列是复选框类型。然后我的 UI 中有两个按钮,一个用于选中所有,另一个用于取消选中所有。我想在按下 a 按钮时选中列中的所有复选框,并在按下另一个按钮时取消选中所有复选框。我该怎么做?

一些sn-p代码:
<...>

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

谢谢!

【问题讨论】:

    标签: wpf checkbox gridviewcolumn


    【解决方案1】:

    您不必选中/取消选中所有复选框。您只需设置复选框绑定到的属性,然后复选框将选中取消选中。但是,您确实需要实现 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(); 
    

    【讨论】:

      猜你喜欢
      • 2010-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多