WPF Установите / снимите все флажки, расположенные в сетке
У меня есть сетка с некоторыми столбцами. Одним из этих столбцов является флажок типа. Затем в моем интерфейсе есть две кнопки: одна для проверки всех и другая для отмены всех. Я хотел бы отметить все флажки в столбце, когда нажимаю кнопку, и снимать все флажки, когда нажимаю другой. Как я могу это сделать?
Некоторый фрагмент кода:
<...>
<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();
}
Спасибо!
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 (в коде), пользовательский интерфейс будет обновляться, и ваши флажки будут проверять / снимать флажок
вам не нужно делать это
// Update with new values the UI
lstViewRutas.ItemsSource = _RutasCollection.GetCollection();