PDA

View Full Version : [WPF] Colonna: seleziona tutti


robertino_salemi
23-02-2015, 11:08
Buon dė,
nel mio DataGrid, vorrei inserire una "Seleziona tutto" per ogni riga presente.

Nello XAML:


<DataGridTemplateColumn>
<DataGridTemplateColumn.Header>
<CheckBox Name="chkbxSelectAll" PreviewMouseLeftButtonDown="chkbxSelectAll_PreviewMouseLeftButtonDown"></CheckBox>
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox x:Name="CheckBox"
PreviewMouseLeftButtonDown="CheckBox_PreviewMouseLeftButtonDown" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>


Il metodo CheckBox_PreviewMouseLeftButtonDown:


private void CheckBox_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var chk = (CheckBox)sender;
var row = VisualTreeHelpers.FindAncestor<DataGridRow>(chk);
var newValue = !chk.IsChecked.GetValueOrDefault();

row.IsSelected = newValue;
chk.IsChecked = newValue;

e.Handled = true;
}


funziona bene.

Idee o suggerimenti per il "Seleziona tutto"?

Grazie!

robertino_salemi
24-02-2015, 08:52
Risolto,
ho aggiunto una property al mio modello:


[DisplayName("IsChecked")]
public bool IsChecked { get; set; }


nel mio CS ho inserito:

private void HeadCheck(object sender, RoutedEventArgs e, bool IsChecked)
{
var items = dgPlan.Items.OfType<AnalysisPlanItem>();
foreach (var item in items)
{
item.IsChecked = IsChecked;
}

dgPlan.Items.Refresh();
}

private void chkbxSelectAll_Checked(object sender, RoutedEventArgs e)
{
HeadCheck(sender, e, true);
}

private void chkbxSelectAll_Unchecked(object sender, RoutedEventArgs e)
{
HeadCheck(sender, e, false);
}


nello XAML:

<DataGridTemplateColumn>
<DataGridTemplateColumn.Header>
<CheckBox Name="chkbxSelectAll" Checked="chkbxSelectAll_Checked" Unchecked="chkbxSelectAll_Unchecked" />
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox x:Name="CheckBox" IsChecked="{Binding IsChecked}" PreviewMouseLeftButtonDown="CheckBox_PreviewMouseLeftButtonDown" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>


Il mio obiettivo era non intaccare il modello...ma alla fine si č rilevata la strada pių semplice.