Quote Originariamente inviata da exFelino Visualizza il messaggio
Risolto,
ho aggiunto una property al mio modello:

codice:
[DisplayName("IsChecked")]
public bool IsChecked { get; set; }
nel mio CS ho inserito:
codice:
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:
codice:
<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.
Basta anche una funzione solo, che fa check/Uncheck. A ogni click fai la negazione (!) del valore bool della proprietà isChecked