0

いくつかの列を持つグリッドビューがあります。これらの列の 1 つはチェックボックス タイプです。次に、UI に 2 つのボタンがあります。1 つはすべてをチェックし、もう 1 つはすべてをチェック解除します。ボタンを押したときに列のすべてのチェックボックスをオンにし、別のボタンを押したときにすべてのチェックボックスをオフにしたいと思います。これどうやってするの?

いくつかのスニペット コード:
<...>

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

そして、ページが読み込まれたイベントで、これを実行してグリッドビューにデータを入力します。

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

すべて問題ありませんが、いずれかのボタンを押すと、グリッドビュー列のすべてのチェックボックスをオン/オフにしたいと思います。これどうやってするの?

このようなもの?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();            
    }

ありがとう!

4

1 に答える 1

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(); 
于 2010-03-24T22:35:48.577 に答える